package main
import"fmt"funcadd(x, y int)(int,error){return x + y,nil}funcmain(){// 用法 1, 通过已经定义好的变量值进行判断
n :=12if n >10{
fmt.Println(n,"> 10")}else{
fmt.Println(n,"<= 10")}// 用法 2, 在判断条件中进行变量赋值, 这样不会影响到外部变量, 本例中有 n 在外部已经定义, 但是不会冲突if n :=100; n >10{
fmt.Println(n,"> 10")}else{
fmt.Println(n,"<= 10")}// 用法 3, 调用函数获取返回值, 再进行判断if r,_:=add(1,2); r >3{
fmt.Printf("r: %v, r > 3\n", r)}else{
fmt.Printf("r: %v, r <= 3\n", r)}}
for(go 中没有 while)
package main
import"fmt"funcmain(){// 根据数量循环for i :=0; i <3; i++{
fmt.Println(i)}// 忽略初始语句(需要提前声明)
i :=1for; i <10; i++{
fmt.Println(i)}// 忽略初始语句和操作语句// 操作变量的步骤写在内部// 内部不定义操作变量的步骤则为 while true
j :=0for j <10{
fmt.Println(j)
j++// 不加这个就是死循环}// 键值循环 for range
strA :="abc中国"for_, v :=range strA {
fmt.Printf("%c\t", v)// %c 根据编码找字符}// for循环可以通过break、goto、return、panic强制退出}
switch
package main
import"fmt"funcmain(){// 第一种
a :=3// 模拟获取选项switch a {case1:
fmt.Println("press 1")case2:
fmt.Println("press 2")default:// 默认选项, 如果上边条件都不符合, 就会进入default
fmt.Println("输入错误")}// 第二种, 变量写在条件中, 不会对全局有影响switch a :=2; a {case1:
fmt.Println("press 1")case2:
fmt.Println("press 2")}// 多个条件, 相同case, 条件用逗号分隔
num :=2switch num {case1,3,5,7,9:
fmt.Println("奇数")case2,4,6,8,0:
fmt.Println("偶数")}// 条件为表达式
b :=18switch{// 若 case 条件为表达式, 这里不需要声明任何东西case b <18:
fmt.Println("未成年")case b >=18:
fmt.Println("已成年")}//fallthrough, 执行满足条件的case和下一个case, 为兼容c中的case设计
s :="a"switch{case s =="a":
fmt.Println("x")fallthroughcase s =="b":
fmt.Println("b")case s =="c":
fmt.Println("c")default:
fmt.Println("...")}
break & continue
package main
import"fmt"funcmain(){// 跳出循环, 不执行下次for i :=0; i <5; i++{if i ==3{break}
fmt.Println(i)}
fmt.Println("end")// 结果为: 0 1 2 end// 停止本次循环, 继续下次for i :=0; i <5; i++{if i ==3{continue}
fmt.Println(i)}
fmt.Println("end")// 结果为: 0 1 2 4 end}
goto
常见跳出多层for循环写法
package main
import"fmt"funcmain(){
flag :=falsefor i :=0; i <5; i++{for j :=0; j <3; j++{if i ==2&& j ==2{
flag =truebreak}
fmt.Printf("%v-%v\n", i, j)}if flag {break}}
fmt.Println("两层for循环结束")}
goto 标签
// 代码逻辑复杂后, 逻辑容易混乱, 不建议使用package main
import"fmt"funcmain(){for i :=0; i <5; i++{for j :=0; j <3; j++{if i ==2&& j ==2{// 跳出循环goto breakTag
}
fmt.Printf("%v-%v\n", i, j)}}
fmt.Println("结束for循环")
breakTag:// 定义一个label
fmt.Println("label结束for循环")}// 执行到goto, 跳转到标签处执行, 再执行标签代码后边的代码 // 会输出bbbb, 不会输出aaaa, 因为aaaa已经被跳过