1 条件判断if和switch
所有的编程语言都有这个if,表示如果满足条件就做某事,不满足就做另一件事,go中的if判断和其它语言的区别主要有以下两点
1. go里面if条件判断不需要括号
2. go的条件判断语句中允许声明一个变量,这个变量的作用只在该条件逻辑块中
例子如下:
package main
import "fmt"
func main() {
x := 5
// 条件变量在外部声明
if x >= 5 {
fmt.Println("x >= 5")
} else {
fmt.Println("x < 5")
}
// 条件变量在条件语句内部声明
if y := 3; y > 5 {
fmt.Println("y > 5")
} else {
fmt.Println("y <= 5")
}
}
结果如下:
当同时有多个if判断时,使用switch会使得我们的代码更简洁和灵活
例子如下:
package main
import "fmt"
func main() {
i := 6
switch i {
case 4:
fmt.Println("The integer was <= 4")
fallthrough
case 5:
fmt.Println("The integer was <= 5")
fallthrough
case 6:
fmt.Println("The integer was <= 6")
fallthrough
case 7:
fmt.Println("The integer was <= 7")
fallthrough
case 8:
fmt.Println("The integer was <= 8")
fallthrough
default:
fmt.Println("default case")
}
}
switch中默认每个case都带了一个break, 如果匹配成功不会继续往下执行,如果需要继续往下执行,则使用fallthrough强制执行后面的代码,因此,上面代码的运行结果是:
2. 无条件跳转goto
goto适用方法和c/c++类似,我们需要在函数中定义一个标签label,然后使用goto label即可无条件跳转到该位置,例子如下:
package main
import "fmt"
func main() {
x := 5
fmt.Println("x = ", x)
goto Here
fmt.Println("test")
Here:
fmt.Println("goto here")
}
结果:
1.3 循环控制for
for和其它语言C、C++类似,只是格式不用括号包括,用法如下
for expression1; expression2; expression3 {
//...
}
expression1, expression2和expression3都是表达式,其中expression1和expression3是变量声明和函数调用返回值之类的,expression2用来条件判断,expression1在循环开始前调用,expression3在每轮循环结束时调用
例子:计算1-9整数之和
package main
import "fmt"
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println("sum is equal to ", sum)
}
// 输出:sum is equal to 45
go里面是没有while这个关键字的,想要达到和while一样的效果也可以通过for实现,在for循环中expression1和expression3都省略掉就可以达到while的效果了。例子:
package main
import "fmt"
func main() {
sum := 1
for sum < 10 {
sum += sum
}
fmt.Println("sum is equal to ", sum)
}
// 输出:sum is equal to 16
在循环中有两个关键操作continue和break,continue表示跳过本次循环,break表示跳出当前循环,这一点和C、C++一致。举个简单的例子
package main
import "fmt"
func main() {
for i := 10; i > 0; i-- {
if i == 5 {
break // 或者continue
}
fmt.Println(i)
}
// break打印出来10、9、8、7、6
// continue打印出来10、9、8、7、6、4、3、2、1
}
除此之外,还有一个常见的用法就是for和range配合来便利slice和map的数据,例子如下:
package main
import "fmt"
func main() {
stus := map[string]string{
"name": "test",
"age": "18",
"score": "78",
}
for key, val := range stus {
fmt.Printf("key = %s, val = %s\n", key, val)
}
}
输出结果为: