前言
对于条件,选择,循环各个语言大差不差 这里就简单讲一下 如何使用
条件
package main
import "fmt"
func main() {
a := 20
if a > 0 {
fmt.Println("大于0")
}else {
fmt.Println("小于0")
}
}
结果
大于0
选择
switch 和 type switch
switch 后跟变量,case 后跟常量,只要变量值和常量匹配,就执行该分支下的语句。当然switch语句会逐个匹配case语句,一个一个的判断过去,直到有符合的语句存在如果没有一个是匹配的,就执行default后的语句。注意switch后可以跟空
package main
import "fmt"
func main() {
name := ""
switch name {
case "zhuzhu":
fmt.Println("zhuzhu")
case "nanna":
fmt.Println("nanan")
case "liangliang":
fmt.Println("liang")
default:
fmt.Println("默认")
}
number := 70
//如果没有一个是匹配的,就执行default后的语句。
//注意switch后可以跟空,如上
//switch {
//这样case就必须是表达式。
switch {
case number >= 90:
fmt.Println("优秀")
case number >= 80:
fmt.Println("良好")
case number >= 60:
fmt.Println("凑合")
default:
fmt.Println("太搓了")
}
//有一个流传于坊间的神秘玩法,可以用switch语句来判断传入变量的类型,然后做一些羞羞的事情。
//x是一个未知类型的变量,switch t := x.(type) 用这个方式来赋值,t就是有确定类型的变量。
//type switch只能用于接口的变量。
var x interface{} //定义接口类型
x = "abc" //实现接口类型 实现为 string
switch t := x.(type) {
case int:
fmt.Println(t)
case float64:
fmt.Println("float64" , t)
default:
fmt.Println("未知类型")
}
}
结果
默认
凑合
未知类型
想象一个场景当你在调用第三方的接口,却发现对方的接口发生了微调,原来的int类型,被转换成了string类型,你必须写出兼容两种方式的代码来解析json。那么这个时候,type switch就派上了用场。
循环
循环的三种形式和break,continue
为了方便 我把解释放在注解里面
package main
import "fmt"
func main() {
nums := []int{1, 2, 3, 4, 5, 6}
//for 循环方式 1 和 c++、java 相似
for i := 0; i < len(nums); i++ {
fmt.Println(i)
}
fmt.Println("----------------")
//for 循环方式 2 省略赋值和++
a, b := 1, 5
for a < b {
fmt.Println(a)
a++
}
fmt.Println("----------------")
//for 循环方式 3 迭代
//优点:不用引入无意义的变量
//缺点:不是直接索引,如果数据量极大会有性能损耗
for index, value := range nums {
fmt.Printf("key: %v value: %v \n", index, value)
}
//当然,你可以把方式 3 中 index 去掉,用_忽略掉key 或者 用_忽略掉value
for _, value := range nums {
fmt.Printf(" value: %v \n", value)
}
//如果你想忽略掉 value,直接用 key也是可以的,这样就消除了迭代方式的缺点!
//当然 这样只默认输出第一个也就是key 所以取value还是需要用 nums[index]
for index := range nums {
fmt.Printf("value: %v \n", nums[index])
}
//死循环
//go 里面没有while 要无限循环的话 可以使用
//这里为了演示加入了break
for {
break
}
fmt.Println("------break、continue 测试----------")
//break、continue
i := 0
for {
i++
if i >= 5 {
fmt.Println("跳出循环")
break
}
if i == 2 {
fmt.Println("触发continue ")
continue
}
fmt.Printf("输出 i : %v \n", i)
}
}
结果
0
1
2
3
4
5
----------------
1
2
3
4
----------------
key: 0 value: 1
key: 1 value: 2
key: 2 value: 3
key: 3 value: 4
key: 4 value: 5
key: 5 value: 6
value: 1
value: 2
value: 3
value: 4
value: 5
value: 6
value: 1
value: 2
value: 3
value: 4
value: 5
value: 6
------break、continue 测试----------
输出 i : 1
触发continue
输出 i : 3
输出 i : 4
跳出循环
Process finished with exit code 0
-----白雪公主嫁给王子之后总要生活,三十年后也有脂肪下垂的一天;睡美人几百年没动过地儿,去拯救她的王子不先吹吹灰怎么能下的去嘴;青蛙王子被变成青蛙那么多年,在遇上自己的公主之前究竟是吃什么过来的;穿上红舞鞋的女孩无法停下跃动的舞步只能跳舞至死,但在累死之前她要想上厕所是怎么解决的
你看,其实我们的童年很脆弱