零值
未显式指定初始值的变量会自动获取零值,具体来说,
00.0false""nil
字面量
_1_234
整形
byteintuintruneuintptr
类型怎么选
intint64uint64
浮点型
float64
注意:
==!=
变量的声明
Go 中支持多种方式灵活声明变量。
- 完整的声明形式,包含类型同时赋值
var x int = 1
- 有初始值的情况下,可省略类型
var x = 1
- 当然也可次声明了不赋值,此时需要指定类型
var x int
- 可同时声明多个变量,甚至包含不同类型
var foo, bar int
var x,y = 1, "hello"
- 声明多个变量时,也可将其放入变量列表中
var (
x int
y, z int = 1, 2
m, foo = 9, "foo"
bar = "hello"
)
:=
:=
x := 10
// 等效于
var x int = 10
//
m, foo := 10, "hello"
同时声明多个变量的方式也适用于该操作符:
m, foo := 10, "hello"
该形式不仅可用来声明新的变量,还可同时设置已有变量,前提是符号左边至少有一个新声明的变量即可。
var x = 10
x, y := 11, "hello"
fmt.Println(x, y)
// 11 hello
const
const
常量分为有类型(Typed)与无类型(UnTyped)常量,前者在赋值时需要目标变量类型匹配,后者没有这个限制。
- 有类型常量
const x float64 = 3.3
var y float64 = x
var z int = x // cannot use x (constant 3.3 of type float64) as int value in variable declarationcompilerIncompatibleAssign
- 无类型常量
const x = 3
var y float64 = x
var z int = x // ✅
变量名
和其他语言不同,对于变量名,Go 中仅要求以下划线或字母开头,所使用的字母可以是任意 Unicode 字符,所以如下示例中都是合法的变量名:
_x := 1
_å := "a symbol"
π := 3.14
虽然变量名中支持包含下划线,但不提倡使用蛇形 (snack case)命名法,推荐使用驼峰。
for-rangekvkeyvalueforij
如果是全局包变量,则恰恰相反,应该尽量取得详尽一些。