if用于判断, 一般有如下三种形式
1.if 条件 {...}
2.if 条件 {
} else { // else不能写在下一行
}
3.if 条件 { // 只会执行一个代码块(即各代码块互斥)
} else if 条件 {
} else if 条件 {
} else {
}
例: 从终端读入一个数, 再转换成整数, 如果不能转换, 则输出can not convert to int
func main() {
var input string
fmt.Scanf("%s", &input) // 通常都使用%s(读入的是字符串)
var inputNumber, err = strconv.Atoi(input)
if err == nil {
fmt.Printf("你输入的数字是: %d\n", inputNumber)
} else {
fmt.Printf("%s can not convert to int\n", input)
}
}
switch开关, 用于多条件选择, 虽然可以使用if代替
不过使用switch更易读直观
func main() {
var a = 70
switch a {
case 60: fmt.Println("a=60") // 不用使用break, 自动阻断case穿透
case 70: fmt.Println("a=70")
case 80, 90, 100: fmt.Println("a=80或a=90或a=100") // 多个条件下执行相同操作, 可以写在一起
default: fmt.Println("default")
}
}
输出结果为:a=70
go语言, 自动阻止case穿透, 即执行一个case自动就停止
fallthrough关键字可以实现穿透
如果fallthrough被执行到, 则下面一个case会被执行
func main() {
var a = 60
switch a {
case 60:
fmt.Println("a=60")
fallthrough // 此关键字需要单独写在一行
case 70:
fmt.Println("a=70")
case 80:
fmt.Println("a=80")
default:
fmt.Println("default")
}
}
输出结果为:
a=60
a=70
switch另一种形式:switch后面省略条件, 将条件写在case后面
这种写法更像if...else if...else if...else
switch {
case false : fmt.Println("优秀")
case false : fmt.Println("合格")
case true : fmt.Println("不及格") // 会输出不及格
default : fmt.Println("非法的值")
}
例: 从终端输入一个数, 再随机生成一个0-100的数, 比较他们大小
func main() {
for {
var inputNum int
fmt.Scanf("%d\n", &inputNum) // 这个\n必须要加上, 因为输入数字后回车, 回车符就是\n, 要将它从缓冲区取走
randomNum := random()
fmt.Println("随机数是: ", randomNum)
flag := false // 用于标识猜对了就退出
switch {
case inputNum == randomNum:
fmt.Println("猜对了")
flag = true
case inputNum > randomNum :
fmt.Println("输入小点的数")
case inputNum < randomNum :
fmt.Println("输入大点的数")
}
if flag {
return
}
}
}
func random() int {
return rand.Intn(100)
}
for循环
形式一:
for循环由三部分组成
for i:=0; i<n; i++ { // 没有小括号, 加上小括号还不能通过编译for (i:=0; i<n; i++){...}
}
而if是可加小括号, 可不加, 都能通过编译
形式二:
for true {...} // 死循环(也可以省略true: for {...})
形式三:
for range 用于遍历 数组, slice, map, chan
例如字符串 str := "hello world" (字符串就是字符数组), 如下遍历
for i, v := range str { // i是下标, v是对应的值
}
在循环中可能会使用到continue与break来控制流程
continue 跳过本次循环进入下次循环
break结束循环(而return有两个作用: 返回值 和 结束函数执行)
goto
在函数内部使用goto跳转到指定的位置
func main() {
i := 0
HE: // HE就是一个标识
println(i)
i ++
if i==5 {
return
}
goto HE // 跳转到标识
}
goto的可读性比较差, 一般不建议使用它