Go语言变量

2021/05/31

Tags: Go

摘要:Go语言变量


Go语言中的变量定义相对严格,当定义一个局部变量为使用时,会编译报错,在go语言中,无需要多余的代码。但全局变量除外,定义全局变量允许暂不使用。

全局变量

全局变量可以被全局访问

定义全局变量:

// global variable
var x, y int

var (
    a int
    b bool
)

基本常量

常量一经被定义后无法被重新赋值,常量可以定义为全局的,也可以定义为局部的。

定义常量:

// 这是一个常量
const CONST1 = 111

iota常量

iota,特殊常量,可以认为是一个可以被编译器修改的常量。 iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

const (
    a = iota
    b = iota
    c = iota
)

// 以上写法可以简写为
const (
    d = iota
    e
    f
)

fmt.Println(a, b, c)
fmt.Println(d, e, f)

// 输出结果:

// 0 1 2
// 0 1 2 

iota常量可以恢复计数

// iota可以恢复计数
const (
    aa = iota
    bb
    cc
    dd = "lalala"
    ee = 2
    ff = true
    gg = iota // 恢复计数
    hh
)
fmt.Println(aa, bb, cc, dd, ee, ff, gg, hh)

// 输出结果为:

// 0 1 2 lalala 2 true 6 7

关于iota一个有趣的例子

// iota 移位运算
const (
    ii = 1 << iota
    jj = 2 << iota
    kk = 3 << iota
    ll // 此处等价于 ll = 3 << iota
    mm // 此处等价于 ll = 3 << iota
)
fmt.Println(ii, jj, kk, ll, mm)

// 输出结果为:

// 1 4 12 24 48

变量

定义变量:

// 定义一个变量并对其赋值
var intVal int
intVal = 1

// 定义一个变量对其赋值,与上文中的效果一样
intVal1 := 1

go语言中,int类型比较特殊,可以有多种类型的int。

// int 数据类型 包含了以下所有数据类型
var var1 int = -9223372036854775808

// 无符号 8 位整型 (0 到 255)
var var2 uint8 = 255

// 无符号 16 位整型 (0 到 65535)
var var3 uint16 = 65535

// 无符号 32 位整型 (0 到 4294967295)
var var4 uint32 = 4294967295

// 无符号 64 位整型 (0 到 18446744073709551615)
var var5 uint64 = 18446744073709551615

// 有符号 8 位整型 (-128 到 127)
var var6 int8 = 127

// 有符号 16 位整型 (-32768 到 32767)
var var7 int16 = 32767

// 有符号 32 位整型 (-2147483648 到 2147483647)
var var8 int32 = 2147483647

// 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
var var9 int64 = 9223372036854775807

fmt.Println(var1, var2, var3, var4, var5, var6, var7, var8, var9)

go类型强转

// go 类型转换
var sum int = 16
var sumf float32

sumf = float32(sum / 2)
fmt.Printf("%f\n", sumf)