funcmain(){
color :="black"switch color {case"green"://相当于 if color== "green"
fmt.Println("go")case"red"://相当于else if color== "red"
fmt.Println("stop")default://相当于else
fmt.Printf("invalid traffic signal: %s\n", strings.ToUpper(color))//invalid traffic signal: BLACK}}
switch+表达式:
switch后带表达式时,switch-case只能模拟相等的情况;
如果switch后不带表达式,case后就可以跟任意的条件表达式
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("结婚")}}funcfall(age int){switch{case age >50:
fmt.Println("退休")fallthroughcase age >25:
fmt.Println("生子")fallthroughcase age >22:
fmt.Println("结婚")}}funcmain(){no_fall(60)//退休
fmt.Println("-----------------------")fall(60)//退休//生子//结婚}
三、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拿到的是数据的拷贝
遍历数组或切片:for i, ele := range arr
遍历string:for i, ele := range "我会唱ABC" //ele是rune类型
funcmain(){const SIZE =4
A :=[SIZE][SIZE]float64{}for i :=0; i < SIZE; i++{for j :=0; j < SIZE; j++{
A[i][j]= rand.Float64()//[0,1)中的随机数}}
fmt.Println(A)}
四、break与continue
break与continue区别
break与continue用于控制for循环的代码流程,并且只针对最靠近自己的外层for循环
break和continue都是针对for循环的,不针对if或switch
break:退出for循环,且本轮break下面的代码不再执行
continue:本轮continue下面的代码不再执行,进入for循环的下一轮
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 4
fmt.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 +=3
fmt.Println(i)goto MY_LABEL //返回定义MY_LABEL的那一行,把代码再执行一遍(会进入一个无限循环)}