六、Go语法基础(条件控制和循环控制)

Golang中文学习文档地址

1、条件控制

go中,存在三个条件控制的关键字:if else、swtich、select。

1.1 if else:使用和其他开发语言差不多。

go 复制代码
if 表达式 { //表达式必须返回一个布尔值
    //do someing
} else {
    //or do someing
}

1.2 switch

  • switch语句格式:
go 复制代码
switch expr {
      case case1:
        statement1
      case case2:
        statement2
      default:
        default statement
    }
  • fallthrough关键字:作用:继续执行下一个分支
go 复制代码
func main() {
   num := 2
   switch {
   case num >= 0 && num <= 1:
      num++
   case num > 1:
      num--
      fallthrough // 执行完该分支后,会继续执行下一个分支
   case num < 0:
      num += num 
   }
   fmt.Println(num)
}

1.4 select

select在并发中使用。

select 语句只能用于通道(Channel)操作,每个 case 必须是一个通道操作,要么是发送要么是接收。

go 复制代码
package main

func main() {

    chan1 := make(chan int)//创建一个channel
    chan2 := make(chan int)
    //创建一个协程
    go func() {
       chan1 <- 1
    }()
    //创建一个协程
    go func() {
       chan2 <- 2
    }()
    for true {
       select {
       case v1 := <-chan1:
          // 当chan1有值写入时,执行
          println("chan1:", v1)
       case v2 := <-chan2:
          // 当chan2有值写入时,执行
          println("chan2:", v2)
       default:
          break
       }
    }

}

1.5 label

  • 标签语句,可以结合gotobreakcontinue的目标。

    给某段代码块进行打标签,后续可以通过goto等关键字,将代码执行流程跳转到该段代码。 标签只标注了位置,而不是包含某一段代码,只是为了goto等关键字将当前的执行位置,跳转到标签后,从该标签的位置继续执行。

go 复制代码
package main

import "fmt"

func main() {
	num := 1
	if num < 10 {
		fmt.Println("goto A")
		goto A //执行跳转到A标签所在代码块,从A标签位置继续往下执行
	}
	//因以上条件已经跳转到标签A的位置,所以该代码块不能被执行
	if num > 10 {
		fmt.Println("goto B")
		goto B
	}
A:
	fmt.Println("start A")
	num += 10

B:
	//标签只标注了位置,所以从标签A继续往下执行,该代码块也会被执行
	fmt.Println("start B")
	num -= 10

	fmt.Println(num, " end num")
}

//执行结果
//goto A
//start A
//start B
//1  end num

1.6 goto

  • 结合label标签使用,将控制权传递给在同一函数对应标签的位置。
  • 通过labelgoto结合使用,也能够在一定程度上实现循环控制。
go 复制代码
func main() {
   a := 1
   if a == 1 {
      goto A
   } else {
      fmt.Println("b")
   }
A:
   fmt.Println("a")
}
//输出结果
//a

2、 循环控制

  • 在Go中有且只有一个中循环控制:for,没有像Java中的while。

2.1 for

  • 表达式
go 复制代码
for init statement; expression; post statement {
  execute statement
}
  • 使用案例
go 复制代码
func main() {
	for i := 1; i < 10; i++ {
            fmt.Printf("num:%d\n", i)
	}
}
  • for循环只保留表达式,就变成其他语言中的while
go 复制代码
func main() {
	i := 1
	for i <= 10 {
		fmt.Println(i)
		i++
	}
}

2.2 for range

  • for range可以更加方便的遍历一些可迭代的数据结构,如数组,切片,字符串,映射表,通道。
go 复制代码
for index, value := range iterable { //index:迭代的索引,value:索引下对应的值
  // do someing
}

2.3 break

  • break关键字会终止最内层的for循环。
go 复制代码
func main() {
  for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
      if i <= j {
        break
      }
      fmt.Println(i, j)
    }
  }
}

2.4 continue

  • continue关键字会跳过最内层循环的本次迭代,直接进入下一次迭代。
go 复制代码
func main() {
  for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
      if i > j {
        continue
      }
      fmt.Println(i, j)
    }
  }
}
  • 还可以结合标签(label),跳转到相应的标签位置。
go 复制代码
func main() {
Out:
  for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
      if i > j {
        continue Out
      }
        fmt.Println(i, j)
    }
  }
}
相关推荐
avilang14 小时前
如何在 Go 1.24+ 中管理 tool 依赖
go
程序员爱钓鱼15 小时前
用 Go 做浏览器自动化?chromedp 带你飞!
后端·go·trae
小信啊啊1 天前
Go语言结构体
golang·go
moxiaoran57531 天前
Go语言的常量
go
武大打工仔2 天前
如何理解 Golang 中的 Context?
go
Java陈序员3 天前
精致简约!一款优雅的开源云盘系统!
mysql·docker·开源·go·云盘
捧 花3 天前
Go语言模板的使用
golang·go·template method·模板·web app
凉凉的知识库3 天前
在Go中读取MySQL Date类型,一不小心就踩坑
mysql·面试·go
51974 天前
goup是一个纯Rust编写的优雅的Go多版本管理工具
go