控制语句:if/else 、for的三种型态 、range 、switch
if/else
使用if/else链给分数评级,并演示if的初始化语句
Go
func Classify(score int) (grate string, ok bool) {//具名返回值,在函数内不用定义可以直接用并且return的时候不用写返回什么值
if score < 1 || score > 100 {
grate = "No"
ok = false
}
if s := score; s >= 60 { //这里定义了一个作用域仅限于该if控制链的变量
grate = "pass"
ok = true
} else {
grate = "no pass"
ok = false
}
return //默认return grete ok两个变量
}
func main() {
fmt.Println(Classify(1))
}
for循环,经典的三段式循环求和
Go
for i,sum:=0,0;i<10;i++{ //这里也可以单独写一个循环条件,这样就类似于while循环了,因为go本身循环没有while循环,所以这样来说就是替代了while循环
sum += i
}
for循环,for rang遍历
Go
for index,data range nums{ //这个nums是个切片,index下表,data内容副本
略
}
for i range n{ //这个n是整数,这个循环的意义是从0到n-1
略
}
switch 分支语句
Go
func SwitchType(v any) string { // any 是 interface{} 的别名(Go 1.18+)
switch t := v.(type) { // 类型 switch: t 在各分支中拥有对应的具体类型
case nil: // 接口零值分支
return "nil" // 未装入任何动态类型
case int, int64: // 多个类型可合并; 此时 t 的静态类型仍是 any
return fmt.Sprintf("integer %v", t) // %v 打印动态值
case string: // 字符串分支: 此处的 t 静态类型已是 string
return "string<" + t + ">" // 可直接做字符串拼接
case error: // 错误分支: 此处的 t 静态类型已是 error 接口
return "error: " + t.Error() // 可调用接口方法
default: // 其它类型
return fmt.Sprintf("%T", v) // %T 打印动态类型名
} // switch 结束
} // 函数结束