- 2.2 运算符
- 2.3 初始化
- 2.4 控制流
& ! * + – ^ <- (channel)
PS. ^作为一元操作符, 表示求反码, 同c里的 ~
优先级 | 操作符 | 备注 |
---|---|---|
5 | * / % << >> & &^ | &^ 同c中的 &(~x)位清理 |
4 | + – | ^ | ^ 作为2元表达式, 是异或(xor) |
3 | == != < <= > >= | |
2 | && | |
1 | || |
var a = struct{ x int }{100}
var b = []int{1, 2, 3}
a := []int{
1,
2,
}
if n := "abc"; x > 0 {
支持三种循环⽅方式,包括类 while 语法
类型 | 1st value | 2nd value | 备注 |
---|---|---|---|
string | index | s[index] | unicode字符串2nd value是rune |
array/slice | index | s[index] | |
map | key | m[key] | |
channel | element |
a := [3]int{0, 1, 2}
for i, v := range a {
// 因为a是值类型的数组
// index, value 都从a的复制品中取出
if i == 0 {
a[1], a[2] = 999, 999 //修改a的值
fmt.Println(a) // [0, 999, 999]
}
a[i] = v + 100 // 用复制品中取出的v修改原数组
}
fmt.Println(a) //[100, 101, 102]
建议使用引用类型,其底层数据不会被复制。
x := []int{1, 2, 3}
i := 2
switch i {
case x[1]:
println("a")
fallthrough
case 1, 3:
println("b")
default:
println("c")
}
switch {
case x[1] > 0:
println("a")
case x[1] < 0:
println("b")
default:
println("c")
}
switch i := x[2]; { 带初始化语句
case i > 0:
println("a")
case i < 0:
println("b")
default:
println("c")
}
func main() {
L1:
for x := 0; x < 3; x++ {
L2:
for y := 0; y < 5; y++ {
if y > 2 { continue L2 }
if x > 1 { break L1 }
print(x, ":", y, " ")
}
println()
}
}
x := 100
switch {
case x >= 0:
if x == 0 { break }
println(x)
}