从0开始学GO之流程控制


更多参见: 从0开始学GO之目录

条件语句

Go 语言提供了以下几种条件判断语句:

语句描述
if 语句if 语句 由一个布尔表达式后紧跟一个或多个语句组成。
if…else 语句if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。
if 嵌套语句你可以在 ifelse if 语句中嵌入一个或多个 ifelse if 语句。
switch 语句switch 语句用于基于不同条件执行不同动作。
select 语句select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

if相关语句

package main
import "fmt"

func main() {
	/* 定义局部变量 */
	var a int = 100
	var b int = -200

	/* 判断条件 */
	if a == 100 {
		/* if 条件语句为 true 执行 */
		if b+1 == 200 {
			/* if 条件语句为 true 执行 */
			fmt.Printf("a 的值为 100 , b 的值为 200\n" )
		} else {
			/* if 条件语句为 false 执行 */
			fmt.Printf("a 的值为 100 , b 的值不为 200\n" )
		}
	} else {
		fmt.Printf("a 的值不为 100\n" )
	}
	
	fmt.Printf("a 值为 : %d\n", a )
	fmt.Printf("b 值为 : %d\n", b )
}

在这里插入图片描述

switch 语句

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止,匹配项后面也不需要再加 break。switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough 。(这一点和C/C++这些语言不同)

package main
import "fmt"

func main() {
	/* 定义局部变量 */
	var grade string = "B"
	var marks int = 90

	switch marks {
	case 90: grade = "A"
	case 80: grade = "B"
	case 50,60,70 : grade = "C"
	default: grade = "D"
	}

	switch {
	case grade == "A" :
		fmt.Printf("优秀!\n" )
	case grade == "B", grade == "C" :
		fmt.Printf("良好\n" )
	case grade == "D" :
		fmt.Printf("及格\n" )
	case grade == "F":
		fmt.Printf("不及格\n" )
	default:
		fmt.Printf("差\n" )
	}
	fmt.Printf("你的等级是 %s\n", grade )
}

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

package main
import "fmt"

func main() {
	var x interface{}
	x = 3.14
	switch i := x.(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("未知型")
	}
	// x 是 float64 型
}

在这里插入图片描述

参见 理解Golang中的interface和interface{}

select 语句

select 是 Go 中的一个控制结构,类似于用于通信的 switch 语句。每个 case 必须是一个通信操作,要么是发送要么是接收。

select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。一个默认的子句应该总是可运行的。

package main

import (
	"fmt"
	"time"
)

func Chann(ch chan int, stopCh chan bool) {

	for j := 0; j < 10; j++ {
		ch <- j
		time.Sleep(time.Second)
	}
	stopCh <- true
}

func main() {

	ch := make(chan int)
	c := 0
	stopCh := make(chan bool)

	go Chann(ch, stopCh)

	for true {
		select {
			case c = <-ch:
				fmt.Println("Recvice", c)
				fmt.Println("channel")
			case s := <-ch:
				fmt.Println("Receive", s)
			case _ = <-stopCh:
				goto end
		}
	}
end:
}

在这里插入图片描述

case c = <-ch: 与 case s := <-ch: 随机执行,每次运行的打印结果会不同

循环语句

循环类型描述
for 循环重复执行语句块
循环嵌套在 for 循环中嵌套一个或多个 for 循环

for 循环

for 循环是一个循环控制结构,可以执行指定次数的循环。

Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号。

和 C 语言的 for 一样:

for init; condition; post { }

和 C 的 while 一样:

for condition { }

和 C 的 for(; ; ) 一样:

for { }
  • init: 一般为赋值表达式,给控制变量赋初值;
  • condition: 关系表达式或逻辑表达式,循环控制条件;
  • post: 一般为赋值表达式,给控制变量增量或减量。

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:

for key, value := range oldMap {
    newMap[key] = value
}

示例:

package main
import "fmt"

func main() {
	strings := []string{"Hello", "World"}
	// for init; condition; post { }
	fmt.Println("for init; condition; post { }")
	for i := 0 ;i<len(strings);i++ {
		fmt.Println(i, strings[i])
	}
	// for condition { }
	fmt.Println("for condition { }")
	i := 0
	for i < len(strings) {
		fmt.Println(i, strings[i])
		i++
	}
	// for { }
	fmt.Println("for { }")
	i = 0
	for {
		if i>=len(strings)  {
			break
		}
		fmt.Println(i, strings[i])
		i++
	}
	// for range  { }
	fmt.Println("for range  { }")
	for i, s := range strings {
		fmt.Println(i, s)
	}
}

在这里插入图片描述

无限循环

    for true  {
        fmt.Printf("这是无限循环。\n");
    }

循环控制语句

循环控制语句可以控制循环体内语句的执行过程。

GO 语言支持以下几种循环控制语句:

控制语句描述
break 语句经常用于中断当前 for 循环或跳出 switch 语句
continue 语句跳过当前循环的剩余语句,然后继续进行下一轮循环。
goto 语句将控制转移到被标记的语句。必须在当前函数内定义的标签:

continue 与 goto

示例:

package main
import "fmt"

func main() {
	/* 定义局部变量 */
	a := 0
	/* for 循环 */
	for true {
		if a == 15 {
			/* 跳过此次循环 */
			fmt.Printf("a 的值为 : %d\n", a)
			a++
			continue
		}
		if a == 20 {
			fmt.Printf("a 的值为 : %d\n", a)
			goto end
		}
		a++
	}
end:
	fmt.Println("goto end")
}

在这里插入图片描述

参考:

https://www.runoob.com/go/go-decision-making.html

https://www.runoob.com/go/go-loops.html

个人能力有限,如有错误或者其他建议,敬请告知欢迎探讨,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 下载安装Go语言的开发环境 Go语言的官方网站是golang.org,你可以在这里下载安装Go语言的开发环境。安装完毕后,可以在终端或命令行中输入go version来确认安装是否成功。 2. Go语言的基础语法 习一门编程语言,首先要掌握的是它的基础语法。可以通过阅读官方文档、教程、书籍等方式来Go语言的基础语法。建议先习以下内容: - 变量和常量 - 数据类型 - 函数 - 控制结构(if/else、for、switch) - 数组和切片 - 结构体和指针 3. 编写第一个Go程序 在习了Go语言的基础语法后,可以试着编写第一个Go程序。可以使用任何文本编辑器(如Notepad、Sublime Text、Visual Studio Code等)来编写代码。以下是一个简单的“Hello World”程序: ``` package main import "fmt" func main() { fmt.Println("Hello, world!") } ``` 将代码保存为hello.go,然后在终端或命令行中输入以下命令来运行程序: ``` go run hello.go ``` 如果一切顺利,终端或命令行中将会输出“Hello, world!”。 4. 继续深入Go语言习了Go语言的基础语法和编写第一个程序后,可以继续深入Go语言的高级特性,比如: - 并发编程 - 接口和多态 - 包和模块化编程 - 错误处理 - JSON编码和解码 - 网络编程 可以阅读官方文档、书籍、博客等资源来习这些高级特性。同时,建议多实践,写一些小项目或练习题来加深对Go语言的理解和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值