package main
import "fmt"'
func main(){
//初始化复合对象,必须使用类型标签,且左大大括号必须在类型尾部
var a struct { x int } = { 100 } // 错误
var b []int = { 1, 2, 3 }//错误
var a = struct{ x int }{100}//正确
var b = []int{1, 2, 3}//争取var
//初始化值以 "," 分隔。可以分多行,但最后一一行行必须以 "," 或 "}" 结尾。
a := []int{
1,
2
}//错误
a := []int{
1,
2,
}//正确
b := []int{
1,
2 }//正确
if n := "abc"; x > 0 {//if语句可以进行初始化
println(n[2])
} else if x < 0 {// 注意 else if 和 else 左大大括号位置。
println(n[1])
} else {
println(n[0])
}
s := "abc"
for i, n := 0, len(s); i < n; i++ { // 常⻅见的 for 循环,支支持初始化语句。
println(s[i])
}
n := len(s)
for n > 0 {
println(s[n])
// 替代 while (n > 0) {}
// 替代 for (; n > 0;) {}省略条件表达式,可当 if...else if...else 使用用。
n--
}
for {
// 替代 while (true) {}
println(s)
// 替代 for (;;) {}
}
s := "abc"
//类似迭代器操作,返回 (索引, 值) 或 (键, 值)
for i := range s {
// 忽略 2nd value,支支持 string/array/slice/map。
println(s[i])
}
for _, c := range s {
// 忽略 index。
println(c)
}
for range s {
// 忽略全部返回值,仅迭代。
...
}
m := map[string]int{"a": 1, "b": 2}
for k, v := range m {
// 返回 (key, value)。
println(k, v)
}
i := 2
switch i {//分支支表达式可以是任意类型,不限于常量。可省略 break,默认自自动终止。
case x[1]:
println("a")
case 1, 3:
println("b")
default:
println("c")
}
switch {//省略条件表达式,可当 if...else if...else 使用。
case x[1] > 0:
println("a")
case x[1] < 0:
println("b")
default:
println("c")
}
}
保留字