package main
import "fmt"
var e = "一个全局变量字符串"
var f, g int = 1, 2 //一次定义多个
//可以用因式分解的写法
var (
h, i, j int = 3, 4, 5
k bool = false
l, m float32 = 2.5, 3.5
)
func main() {
var a bool //定义一个bool变量
var b bool = true //定义时初始化
b = true
var c int = 32 //int变量
var d string //字符串
d = "啊啊啊"
//输出局部变量看看
fmt.Print(a, b, c, d, e)
//输出全局变量看看
fmt.Print(f, g, h, i, j, k, l, m)
}
运行结果:
false true 32啊啊啊一个全局变量字符串1 2 3 4 5 false 2.5 3.5
当定义常量时,或者在初始化变量时可以省略其类型,由编译器做类型推断。
package main
import "fmt"
func main() {
//以下两种方式都可以初始化变量
var a int = 3
b := 3
fmt.Print(a, b)
//初始化多个变量
d, e, f := false, 2.5, "啊啊啊"
fmt.Print(d, e, f)
//定义常量
const c = 4
fmt.Print(c)
}
运行结果:
3 3false 2.5啊啊啊4
package main
import "fmt"
const (
Lau = 0
Zy = 77
Hou = 5
a = "啊啊啊"
b = len(a) //在常量中使用内置函数
)
func main() {
fmt.Print(Lau, Zy, Hou, a, b)
}
运行结果:
0 77 5啊啊啊9
简单的说就是在const
里的iota这个特殊的常量表示了行索引。然后const
本身还有个性质就是,当某行的常量没有显式给初始化值时,会使用和上一行一样的表达式(但在本行计算)。
package main
import "fmt"
const (
a = iota //0
b = iota //1
c //自动和上面一样是iota,而iota自增,为3
d = "啊啊" //自己赋值了,但iota每行都自增一下,为4
e //此时iota为4,但这里是自动和上一行一样,所以为啊啊
f = iota //此时iota为5
//可以使用这样的小技巧
g = iota * 3 //6*3
h //先使用上一行的表达式iota*3,再计算一下是7*3
)
func main() {
fmt.Print(a, b, c, d, e, f, g, h)
}
运行结果:
0 1 2啊啊啊啊5 18 21
package main
import "fmt"
func main() {
//声明名为ok,长度为4的int数组
var ok [4]int
fmt.Print(ok)
//初始化数组
var ok2 = [3]float32{0.5, 1.2, 3.3}
fmt.Print(ok2)
//初始化时省略长度
var ok3 = [...]int{0, 1, 2}
fmt.Print(ok3)
}
运行结果:
[0 0 0 0][0.5 1.2 3.3][0 1 2]