一、变量
Go 是静态类型的,不能在运行时更改变量的类型。
面试问题
关于全局变量的初始化,正确的使用方式如下
A. var i int = 10
B. var i = 10
C. 我 := 10
这是对 Go 语言中全局变量声明和赋值的检查。Go 语言中的变量声明使用关键字 var,例如:
var str string //声明变量
str = "test" //给变量赋值
这里var是定义变量的关键字,str是变量名,string是变量类型,=是赋值符号,“test”是值。上述程序分为两步,第一步是声明一个变量,第二步是给变量赋值。也可以将这两个步骤结合起来。
var str string = "测试"
变量使用关键字 var 定义,并自动初始化为零值。如果你提供了一个初始化值,你可以省略变量类型,它是由编译器自动推断的:
var str = "测试"
Go 语言还提供了一种更短的编写方式:
str := "测试"
相当于先执行 var str string 定义 str 变量,再执行 str = "test" 的赋值操作。
Go 语言全局变量不支持函数外赋值,例如:
var str string // 定义一个全局变量 str
str = "test" // 全局变量不支持此操作
因此,全局变量不支持 str := "test" 操作全局搜索声明是什么意思,该方法只支持局部变量操作。
功能主要(){
x := 123 // 注意检查,是定义新的局部变量还是修改全局变量。这种方法容易出错。
}
可以一次定义多个变量:
变量 x, y, z 整数
变量 s, n = "abc", 123
变量 (
一个整数
b 浮动32
)
功能主要(){
i, s := 123, "你好,世界!"
println(x, s, n)
}
多个变量赋值时,先计算所有相关值,然后从左到右依次赋值。
数据, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100 // (i = 0) -> (i = 2), (data[0] = 100)
全局变量还支持如果一个变量需要依赖其他变量,则先初始化因变量
变量测试1 = 测试2
var test2 = "test2"
二、常数
常量值必须是编译时可确定的数字、字符串或布尔值。
const x, y int = 1, 2 // 多个常量初始化
const s = "你好,世界!" // 类型推断
const ( // 常量组
a, b = 10, 100
c 布尔 = 假
)
在 Go 语言中,不使用局部变量时会出现编译错误,但不使用局部常量时不会出现编译错误。
在常量组中,如果没有提供类型和初始化值,则与之前的常量值一样对待。
常量 (
s = "abc"
x // x = "abc"
)
常量值也可以是函数的返回值,其结果可以在编译时确定,如len、cap、unsafe.Sizeof等。
常量 (
a = "ABC"
b = 长度 (a)
c = unsafe.Sizeof(b)
)
如果常量类型足够大以存储初始化值,则不会引发溢出错误。
常量 (
a byte = 100 // int 到字节
b int = 1e20 // float64 转 int,溢出
)
面试问题:
对于常量定义 zero(const zero = 0.0)全局搜索声明是什么意思,zero 是浮点常量,说话时正确。(false)
Go 语言常量有一些不寻常的地方。尽管常量可以有任何明确的类型,例如 int 或 float64,但许多常量没有明确的基本类型。提供比基础类型更高的算术运算。有六种无类型变量类型,即无类型布尔、无类型整数、无类型字符、无类型浮点、无类型复数和无类型字符串。
枚举
关键字 iota 在常量组中定义了一个从 0 开始的、行计数的、自增的枚举值。
常量 (
星期日 = iota // 0
Monday // 1,通常省略后续的行表达式。
星期二 // 2
星期三 // 3
星期四 // 4
星期五 // 5
星期六 // 6
)
常量 (
= iota // iota = 0
KB int64 = 1