Loading...

文章背景图

go基础:流程控制

2026-07-09
1
-
- 分钟
|

判断

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直接跳转

评论交流

文章目录