与其他语言一样,go语言也是提供常量和变量的,这是程序的基础。变量生命VAR,常量生命使用const关键字。
var name =
注意在使用过程中,类型和表达式两者都可以省略一个,但是不可以都省略。int 0 boor false string 空串
其他诸如接口,slice, 指针,map channle ,fun 默认值都是nil。如果是复合类型,结构体其内部所有元素被赋予对应的默认值
package main
import (
"fmt"
"math/rand"
)
func main() {
var i, j, k int
fmt.Printf("i:%d,j:%d,k:%d", i, j, k)
fmt.Println()
var a, b, c = 1, "s", true
fmt.Printf("a:%d,b:%s,c:%t", a, b, c)
fmt.Println("")
f := rand.Float64() * 100
fmt.Printf("f:%g", f)
}
请注意:= 和= 的区别,=仅仅是赋值,要求变量已经存在,:= 是首次赋值,同事会完成定义
变量是可变的,而与之对应的就是常量,常量的值是不可以改变的。go语言定义常量使用的是const关键字。
const (
多个常量的声明
)
以上两种用法中,第一种会根据等号右侧表达式的值推测出其string类型,需要指出的是,第一种用法是go语言中的无类型用法,这种无类型也是一种类型,是一种比基础类型精度更高的类型,至少可以达到256位,比机器硬件精度更高。其中,无类型的 go语言中六种:无类型布尔,无类型整数,无类型文字符号,无类型浮点数,无类型复数,以及无类型字符串。这种无类型可以用来处理基本类型处理不了的数据,比如精度特别大的浮点数
声明常量时可以使用常量生成器iota,iota可以通过枚举创建一系列相关的值,而且不需要明确定义类型,iota每次从0开始取值,逐次加1
对于iota,如果仅仅是这种用法,自然是有局限性的,实际上iota是支持在表达式中使用的
const (
p2_0 = 1 << iota
p2_1
p2_2
p2_3
)
通过左移运算符达到乘以2的幂的效果