跳到主要内容

变量和常量

变量

变量名由字母数字_ 组成, 并且只能以字母和_开头。

go 语言中有些关键字和保留字不能用于变量名。

25个关键字

    break        default      func         interface    select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

37个保留字

Constants:  true  false  iota  nil

Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error

Functions: make len cap new append copy close delete
complex real imag
panic recover

变量申明

Go 语言中变量需要申明后才能使用, 同一作用域内不支持重复变量申明。且变量申明后必须要使用。

变量申明格式为:

var 变量名 变量类型

还可以批量申明:

var (
变量名 变量类型
变量名 变量类型
变量名 变量类型
...
)

变量初始化

Go 语言在变量申明时会自动进行内存初始化操作, 值为类型的默认值。

整形和浮点型的默认值为 0;

字符串的默认值为 空字符串;

布尔型的默认值为 false;

切片、函数、指针的默认值为 nil;

可以在变量申明时指定初始化值, 格式为

var 变量名 类型 =  变量值

// 例
var name string = "go"

还可以通过值来推导类型, 从而在初始化时不写类型

var 变量名 = 变量值

// 例如
var name = "go" // name 为 字符串 类型

多个变量同时初始化

var 变量名, 变量名 =  变量值, 变量名

// 例
var name, age = "go", 10

在函数中, 可以使用更简短的方式:=来声明初始化变量, 此方式不能在函数外使用。

fun main(){
name := "go" // 省略 var 和 类型
}

匿名变量

匿名变量一般用在接收函数的返回值, 用于忽略某个返回值, 用一个下划线_来表示。

匿名变量不占用命名空间, 不会分配内存, 即匿名变量之间不存在重复申明。

// 例
func ex() (string, int){
return "go", 10
}

func main() {
a, _ := ex()
_, b := ex()
}

常量

常量是个恒定不变的值。常量申明格式:

const 常量名 类型 = 常量值

同时可以去掉类型, 有值进行推导

const 常量名 = 常量值

多个常量同时申明

const (
常量名 = 常量值
常量名 = 常量值
)

const 在多个常量申明时, 如果省略了值就表示和上一个常量值相同

const (
a1 = 1
a2
a3 // a2 a3 值都为 1
)

iota

iota 是常量计数器, 初始值为 0, 只能在常量的表达式中使用。

iota 在 const 关键字出现时被重置为 0。

const 内每多增加一行常量申明, iota 计数将加 1。

const (
a1 = iota // 0
a2 // 1
a3 // 2
)

// 使用 _ 跳过某值
const (
a1 = iota // 0
_
a2 // 2
a3 // 3
)

// 中间添加其他值
const (
a1 = iota // 0
a2 = 200
a3 = iota // 2 使用 iota 重新对接上
a4 // 3
)

定义数量级

/* 
<< 表示左移操作, 1<<2 表示将 1 的二进制数 向左移 2 位, 变为 100,也就是十进制的 11
*/
const (
_ = iota // 省略 0
KB = 1 << ( 10 * iota ) // iota 为 1, 1024
MB = 1 << ( 10 * iota ) // iota 为 2, 1024^2
GB = 1 << ( 10 * iota ) // iota 为 3, 1024^3
TB = 1 << ( 10 * iota ) // iota 为 4, 1024^4
)