作者:迷失港湾的豪 | 来源:互联网 | 2023-05-30 07:38
类型go是**静态类型**语言,不能在运行期改变变量类型。变量定义使用var定义变量,自动初始化为零值;如果提供初始值,可省略变量类型;函数内部可使用:定义变量。varxint自动
类型
go是**静态类型**语言,不能在运行期改变变量类型。
变量定义
- 使用var定义变量,自动初始化为零值;
- 如果提供初始值,可省略变量类型;
- 函数内部可使用:=定义变量。
var x int // 自动初始化为0
var f float32 = 1.6
var s = "abc"
func main(){
x := 123
}
多变量
- 可一次定义多个变量;
- 多变量赋值时,先计算所有相关值,然后再从左到有依次赋值。
var x, y, z int
var s, n = "abc", 123
data, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100 //(i=0) -> (i=2), (data[0]=100)
const
const (
s = "abc"
x // x = "abc" 常量组中,如不提供类型和初始值,那么与上一常量相同
b = len(a)
c = unsafe.sizeof(b) // 可以使用len, cap, unsafe.sizeof等编译器可确定结果的函数返回值
)
枚举
const (
sunday = iota // 0
monday // 1
..
)
const (
_ = iota // iota =0
kb int64 = 1 <<(10 * iota) // iota = 1
mb // 与kb表达式相同,但iota = 2
gb
)
变量默认值
bool |
false |
1 |
byte |
0 |
1 |
rune |
0 |
4 |
int/uint |
0 |
- |
float* |
0.0 |
- |
string |
"" |
- |
slice / map / channel |
nil |
- |
interface/function |
nil |
- |
array / stuct |
- |
- |
类型转换
var b byte = 100
var n int = (int)(b) // 显示转换,建议(type)
a := 100
if a { // 不能使用其他类型当bool使用
println("true")
}
指针
与c类似,略。
数组
var a [4]int = [4]int{1,2} //未初始化的元素将被赋为零值
var b = [...]string{"hello"} //长度为1
c := [...]int{99:-1} //定义了100个元素,最后一个初始化为-1
说明
- 如果数组的元素类型是可以互相比较的,那么数组类型也可以互相比较
- 当两个数组的所有元素相等,那么数组相等
表达式
range
[注意事项](https://studygolang.com/articles/12958)
switch
x := []int{1, 2, 3}
i := 2
switch i {
case x[1]:
println("a") // 自动终止
case ..
}
switch { // 可省略条件
case x > 0 :
...
}
switch i := 2; { // 带初始化语句
...
}