变量
用关键字var声明变量
var v1 int //int类型
var v2 string //string类型
var v3 [10]int //数组
var v4 []int //数组切片
var v5 struct{
f int
}
var v6 *int //指针
var v7 map[string]int //map类型,key为string,value为int
var v8 func[a int]int可以将若干需要声明的变量放置在一起:
var(
v1 string
v2 int
)变量初始化
var v1 int =10
var v2 = 10 //编译器自动推导
v3 := 10 //编译器自动推导
:= 出现在该符号左侧的变量(如v3)不应该是已经声明过的,否则会导致编译错误匿名变量
我们在使用传统的强类型语言编程时,经常会出现这种情况,即在调用函数时为了获取一个
值,却因为该函数返回多个值而不得不定义一堆没用的变量。在Go中这种情况可以通过结合使
用多重返回和匿名变量来避免这种丑陋的写法,让代码看起来更加优雅。
假 设 GetName() 函 数 的 定 义 如 下 , 它 返 回 3 个 值 , 分 别 为 firstName 、 lastName 和
nickName :
func GetName() (firstName, lastName, nickName string) {
return “May”, “Chan”, “Chibi Maruko”
}
若只想获得 nickName ,则函数调用语句可以用如下方式编写:
_, _, nickName := GetName()
这种用法可以让代码非常清晰,基本上屏蔽掉了可能混淆代码阅读者视线的内容,从而大幅
降低沟通的复杂度和代码维护的难度。常量
通过关键字const给字面常量指定一个友好的名字
const Pi float64 = 3.14159265358979323846
const zero = 0.0 // 无类型浮点常量
const (
size int64 = 1024
eof = -1 // 无类型整型常量
)
const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
const a, b, c = 3, 4, “foo” // a = 3, b = 4, c = “foo”, 无类型整型和字符串常量
常量定义的右值也可以是一个在编译期运算的常量表达式,比如
const mask = 1 << 3
预定义常量
iota:可被编译器修改的常量,在每一个const关键字出现时被重置为0,在下一个const出现之前,没出现一次iota,其所代表的数字会自动增1
const (
c0 = iota //c0 = 0
c1 = iota //c1 = 1
c2 = iota //c2=2
)枚举
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
numberOfDays
)
同Go语言的其他符号(symbol)一样,以大写字母开头的常量在包外可见。
以上例子中 numberOfDays 为包内私有,其他符号则可被其他包访问类型
关键字 | 类型 |
---|---|
bool | 布尔类型 |
int8,byte,int16,int,uint,uintptr等 | 整形 |
float32,float64 | 浮点类型 |
complex64,complex128 | 复数类型 |
string | 字符串 |
rune | 字符类型 |
error | 错误类型 |
pointer | 指针 |
array | 数组 |
slice | 切片 |
map | 字典 |
chan | 通道 |
struct | 结构体 |
interface | 接口 |