判断
if initialization;condition{//必须在同一行
}else if condition2{//必须在同一行
}else {//必须在同一行
}runtime.GOOS == "windows",判断操作系统类型
if val:=0;val>max{
max=val
}else if val==max{
val = val + 1
}else {
max = max + 1
fmt.Print(max)
}在if后面初始化的变量,只能在if中使用。
value, err := pack1.Function1(param1)
if err != nil {
fmt.Printf("An error occured in pack1.Function1 with parameter %v", param1)
return err
}
// 未发生错误,继续执行:v由于本例的函数调用者属于 main 函数,所以程序会直接停止运行。
如果我们想要在错误发生的同时终止程序的运行,我们可以使用 os 包的 Exit 函数:
if err != nil {
fmt.Printf("Program stopping with error %v", err)
os.Exit(1)
}(此处的退出代码 1 可以使用外部脚本获取到)
当没有错误发生时,代码继续运行就是唯一要做的事情,所以 if 语句块后面不需要使用 else 分支。
示例 3:可以将错误的获取放置在 if 语句的初始化部分:
if err := file.Chmod(0664); err != nil {
fmt.Println(err)
return err
}示例 4:或者将 ok-pattern 的获取放置在 if 语句的初始化部分,然后进行判断:
if value, ok := readData(); ok {
…
}switch var1 {//必须在同一行
case val1:
...
case val2:
...
default:
...
}switch上var1和case上的val1、2的数据类型必须相同,如果var为int,val必须为int。var为bool val也才能是bool
有一个匹配之后自动停止不用break,想要继续向下执行需要使fallthrough
switch {
case bool1:
case bool2:
}不写switch中的值,默认为true,后面必须为bool
switch result := calculate(); {
case result < 0:
...
case result > 0:
...
default:
// 0
}定义变量也是下面也是bool,有初始化也是默认值
设置断言判断数据类型
package main
import "fmt"
func main() {
var x interface{}
switch i := x.(type) {//i会自动转化成被比较的类型,否则的话是不能调用这个类型的方法
//(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("未知型")
}
}循环
循环只for可用
for 初始化语句; 条件语句; 修饰语句 {
}也可以只有条件语句。相当于whlie
for i>0{
}for { }代表死循环
for三个语句可用省略任意个。但是除了全省了和只有条件,其他要加分号
for pos, char := range str {
...
}char是str中的字符的unicode编码的数值表示,打印需要转成string,或者使用%c
pos是索引
forswitch 或 select (将switch中case的常量换成管道就是select)语句都可以配合标签形式的标识符使用,即某一行第一个以冒号 :) 结尾的单词。标签的名称是大小写敏感的,为了提升可读性,一般建议使用全部大写字母
LABEL1:
for i := 0; i <= 5; i++ {
for j := 0; j <= 5; j++ {
if j == 4 {
continue LABEL1
}
fmt.Printf("i is: %d, and j is: %d\n", i, j)
}
}加上标签就是作用于外部循环
continue直接跳到了外部循环的下一轮。break还会执行外层循环下面的
break LABEL1可用直接结束外层循环
goto LABEL1直接跳转