注意事项!

1、全局变量/常量允许声明但不使用,局部变量/常量声明后必须使用,不然报错:a declared but not used

2、如果你想要交换两个变量的值,则可以简单地使用 a, b = b, a,两个变量的类型必须是相同

3、空白标识符 _ 也被用于抛弃值,_ 实际上是一个只写变量,如值 5 在:_, b = 5, 7 中被抛弃

4、const 声明常量,var 声明变量, := 简写形式默认是声明变量

5、常量表达式中,函数必须是内置函数,否则编译不过,例如:

const (
    a = "abc"
    b = len(a)
    c = unsafe.Sizeof(a)
)

6、const 常量自动赋值,iota 从 0 开始,每赋值一个 iota,则 iota 加 1(iota 只是在同一个 const 常量组内递增,每当有新的 const 关键字时,iota 计数会重新开始)

const (
	a = iota //0
	b = iota //1
	c = iota //2
)

也可简写为

const (
	a = iota //0
	b        //1
	c        //2
)

iota 间隔赋值,等价于当前 const 内部的赋值语法行的索引

const (
	a = 2
	c = iota //1
	b = 2
	d = iota //3
)

7、const 常量若不赋值,会默认使用紧邻上一行的值,若上一行没有值,则报错

const (
	a = 1
	b //默认使用上面的值 1
)

同理,也可以推广为

const (
	a = 0
	b //默认使用上面的值 1
	c = 2
	d //默认使用上面的值 2
)

全局变量:声明方式整理

//=====方式 1
//var x int = 2

//=====方式 2
//var a, b int = 1, 2

//=====方式 3
//var a, b = 1, 2

//=====方式 4
//var a, b = 1, "b"

//=====方式 5
//var (
//	a int = 1
//	b int = 2
//)

//=====方式 6
//var (
//	a = 1
//	b = 2
//)

局部变量:声明方式整理

//=====方式 1
//var x int
//x = 2

//=====方式 2
//var x int = 2

//=====方式 3
//x := 2

//=====方式 4
//var a, b int = 1, 2

//=====方式 5
//var a, b = 1, 2

//=====方式 6
//var a, b = 1, "b"

//=====方式 7
//a, b := 1, 2

//=====方式 8(一般用于声明全局变量)
//var (
//	a int = 1
//	b int = 2
//)

//=====方式 9(一般用于声明全局变量)
//var (
//	a = 1
//	b = 2
//)