一、条件语句
if…else
var a int = 10if a < 0 {fmt.Printf("a < 0" )} else if a > 0 {fmt.Printf("a > 0" )} else {fmt.Println("a == 0")}
switch
go的switch语句不需要添加break:
var grade string
var marks int = 90
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
switch {
case grade == "A":
fmt.Printf("优秀!\n" )
case grade == "B", grade == "C":
fmt.Printf("良好\n" )
case grade == "D":
fmt.Printf("及格\n" )
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" )
}
fmt.Printf("你的等级是 %s\n", grade )
Type Switch
switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。
Type Switch 语法格式如下:
switch x.(type){
case type:
statement(s);
case type:
statement(s);
/* 你可以定义任意个数的case */
default: /* 可选 */
statement(s);
}
示例:
var x interface{}
switch i := x.(type) {
case nil:
fmt.Printf(" x 的类型 :%T",i)
case int:
fmt.Printf("x 是 int 型")
case float64:
fmt.Printf("x 是 float64 型")
case func(int) float64:
fmt.Printf("x 是 func(int) 型")
case bool, string:
fmt.Printf("x 是 bool 或 string 型" )
default:
fmt.Printf("未知型")
}
输出:
x 的类型 :<nil>
fallthrough
使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。
示例:
var num = 50
switch {
case num > 10:
fmt.Println("num > 10")
fallthrough
case num > 50:
fmt.Println("num > 50")
fallthrough
default:
fmt.Println("num <= 10")
}
输出:
num > 10
num > 50
num <= 10
可以看到,本来只需要执行第一个条件,但是由于加上了 fallthrough ,之后的两个语句也执行了。
select
详见:
语雀内容
二、循环语句
for
循环数字
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
循环数组
通过 range 来遍历数组
list := [...]int{1,2,3}
for k, v := range list {
fmt.Println(k, v)
}
如果指定了数组长度,而初始化时并未完全填充,则未填充的值为零值
numbers := [6]int{1, 2, 3, 4}
for i, x:= range numbers {
fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
}
打印:
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 4
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
循环Map
oldMap := map[int]string{1: "a", 2: "b"}
newMap := map[interface{}]interface{}{}
for key, value := range oldMap {
newMap[key] = value
}
fmt.Println(newMap) // map[1:a 2:b]
类while循环
在go中没有while荀凡,可以用for代替:
sum := 1
for ; sum <= 10; {
sum += sum
}
fmt.Println(sum)
for sum <= 10{
sum += sum
}
fmt.Println(sum)
无限循环
for {
fmt.Println("done")
}
for true{
fmt.Println("done")
}
循环控制语句
循环控制语句包括:
- break
- continue
- goto
break 和 continue 不多说,重点说一下 goto 。
每一个语句都能对其添加标签,goto用于跳到指定标签处。
/* 定义局部变量 */
var a int = 10
/* 循环 */
LOOP: for a < 20 {
if a > 12 && a < 18 {
/* 跳过迭代 */
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d\n", a)
a++
}
打印:
a的值为 : 10
a的值为 : 11
a的值为 : 12
a的值为 : 18
a的值为 : 19
再看一个例子:
/* 定义局部变量 */
var a int = 10
/* 循环 */
for a < 20 {
if a > 12 {
/* 跳过迭代 */
a = a + 1
goto DONE
}
fmt.Printf("a的值为 : %d\n", a)
a++
}
DONE: fmt.Println("done")
打印:
a的值为 : 10
a的值为 : 11
a的值为 : 12
done
