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")
}
}
保留字