funcmain(){color :="black"switch color {case"green"://相當(dāng)于 if color== "green"fmt.Println("go")case"red"://相當(dāng)于else if color== "red"fmt.Println("stop")default://相當(dāng)于elsefmt.Printf("invalid traffic signal: %s\n", strings.ToUpper(color))//invalid traffic signal: BLACK}}
switch+表達(dá)式:
switch后帶表達(dá)式時,switch-case只能模擬相等的情況;
如果switch后不帶表達(dá)式,case后就可以跟任意的條件表達(dá)式
funcadd(a int)int{return a +10}funcmain(){switch{caseadd(5)>10:fmt.Println("right")default:fmt.Println("wrong")}}
switch Type
funcswitch_type(){var num interface{}=6.5//等價形式switch num.(type){caseint:value := num.(int)fmt.Printf("number is int %d\n", value)casefloat64:value := num.(float64)fmt.Printf("number is float64 %f\n", value)casebyte:value := num.(byte)fmt.Printf("number is byte %d\n", value)default:fmt.Println("neither")}}
funcno_fall(age int){switch{case age >50:fmt.Println("退休")case age >25:fmt.Println("生子")case age >22:fmt.Println("結(jié)婚")}}funcfall(age int){switch{case age >50:fmt.Println("退休")fallthroughcase age >25:fmt.Println("生子")fallthroughcase age >22:fmt.Println("結(jié)婚")}}funcmain(){no_fall(60)//退休fmt.Println("-----------------------")fall(60)//退休//生子//結(jié)婚}
三、for
for遍歷
funcmain(){arr :=[]int{1,2,3,4,5}for i :=0; i <len(arr); i++{//正序遍歷切片fmt.Printf("%d: %d\n", i, arr[i])}}
for range遍歷:for range拿到的是數(shù)據(jù)的拷貝
遍歷數(shù)組或切片:for i, ele := range arr
遍歷string:for i, ele := range "我會唱ABC" //ele是rune類型
funcbreak_for(){arr :=[]int{1,2,3,4,5}for i, ele :=range arr {fmt.Println("before break", i, ele)if i >2{break}fmt.Println(i, ele)}}funccontinue_for(){arr :=[]int{1,2,3,4,5}for i, ele :=range arr {fmt.Println("before continue", i, ele)if i >2{continue}fmt.Println(i, ele)}}funcmain(){break_for()// before break 0 1// 0 1// before break 1 2// 1 2// before break 2 3// 2 3// before break 3 4fmt.Println("--------------")continue_for()// before continue 0 1// 0 1// before continue 1 2// 1 2// before continue 2 3// 2 3// before continue 3 4// before continue 4 5}
五、goto與Label
goto、Label
funcmain(){var i int=4
MY_LABEL:i +=3fmt.Println(i)goto MY_LABEL //返回定義MY_LABEL的那一行,把代碼再執(zhí)行一遍(會進入一個無限循環(huán))}