零值

未显式指定初始值的变量会自动获取零值,具体来说,

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

如果是全局包变量,则恰恰相反,应该尽量取得详尽一些。

相关资源