Go的条件语句,循环语句和C很像,不同的是Go的条件表达式可以不用括号扩起来,除此之外还有这些不同:
switch语句
switch分支中的代码执行完后会跳出switch代码块,如果我们需要执行后面的 case,可以使用fallthrough。
func main() {
a:=1
switch a {
case 0:
fmt.Println("a is 0")
case 1:
fmt.Println("a is 1")
fallthrough
case 2:
fmt.Println("a is 2")
}
}
结果:
a is 1
a is 2
switch支持任何类型的判断,例如下面的string:
func main() {
var fruitName="apple"
switch fruitName {
case "apple":
fmt.Println("苹果")
case "banana","orange":
fmt.Println("香蕉或橙子")
}
}
switch的另一种形式是不提供任何被判断的值,然后在每个 case 分支中进行测试不同的条件,当任一分支的测试结果为 true 时,该分支的代码会被执行,这比链式的 if-else 语句可读性更好。
func main() {
value:=65
switch {
case value>80:
fmt.Println("优秀")
case value>60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}
使用 type-switch可以判断某个interface变量中实际存储的变量类型。
func main() {
var value interface{}
switch value.(type) {
case nil:
fmt.Printf("t is nil")
case int:
fmt.Printf("t is int")
case float64:
fmt.Printf("t is float64")
case func(int) float64:
fmt.Printf("t is func(int)")
case bool, string:
fmt.Printf("t is bool or string" )
default:
fmt.Printf("t is unknow type")
}
}
for循环语句
Go没有while语句,所有循环都用关键字for:
普通for循环和C一样:
func main() {
for i:=0;i<10;i++{
fmt.Println(i)
}
}
和C的while循环一样:
func main() {
n:=0
for n<10{
fmt.Println(n)
n++
}
}
和C的for(;; ) 一样:
func main() {
n:=0
for {
if n>9{
break
}
fmt.Println(n)
n++
}
}
for range 循环可以对 slice、map、数组、字符串等进行迭代循环:
func main() {
str:="hello"
for i,c:=range str{
fmt.Println(i,c)
}
fruitMap := map[string]int{"apple": 1, "banana": 2, "orange": 3}
for key,value:=range fruitMap{
fmt.Println(key,value)
}
}
结果:
0 104
1 101
2 108
3 108
4 111
apple 1
banana 2
orange 3
网友评论