Golang入门指南 - Go的流程控制

Go 的流程控制

Go中最常用的流程控制有 iffor ,而 switchgoto 主要是为了简化代码、降低重复代码而生的机构,属于扩展类的流程控制

if 条件判断

与 JavaScript的 if 条件判断逻辑是相同的,但写法上还是有一些区别的 ~

package main

import "fmt"

func main() {
	score := 75
	if score >= 90 {
		fmt.Println("A")
	} else if score >= 75 {
		fmt.Println("B")
	} else {
		fmt.Println("C")
	}
}

如上示例,我们会发现Go中if 语句是不需要加括号的,其实加了也不影响(格式化也会帮你去掉的),与 JavaScirpt 最大的区别是简单判断时,{ } 是不能省略的,如下所示:

func main() {
	flag := true
	if !flag fmt.Println("!flag")
}
# command-line-arguments
# syntax error: unexpected fmt, expected {    
# syntax error: unexpected }, expected expression

注意:if 语句 的两种写法及区别,如下所示:

  • 当前区域内的全局变量
func main() {
	age := 24
	if age > 20 {
		fmt.Println("成年人", age)
	}
	fmt.Println(age)
}
# 成年人 24
# 24
  • 局部变量
func main() {
	if age := 24; age > 20 {
		fmt.Println("成年人", age)
	}
	fmt.Println(age)
}
# command-line-arguments 
# undefined: age
for 循环

基本和 JavaScript 相同

package main

import "fmt"

func main() {
	for i := 0; i <= 10; i++ {
		fmt.Println("i = ", i)
	}
}
# i =  0
# i =  1 
# i =  2 
# i =  3 
# i =  4 
# i =  5 
# i =  6 
# i =  7 
# i =  8 
# i =  9 
# i =  10

Go中时没有 while 语句的,所以我们可以通过 for来实现,如下所示:

func main() {
	i := 0
	for {
		if i <= 10 {
			fmt.Println("i = ", i)
		} else {
			break
		}
		i++
	}
}
for range (键值循环)

Go中可以使用 for range 遍历数组、切片、字符串、map及通道

  • 数组、切片、字符串返回其索引和值
  • map返回其键和值
  • 通道只返回通道内的值

以字符串为示例:

其中 index 是数组中每个元素的索引,而 value 则是索引所对应的值

package main

import "fmt"

func main() {
	str := "你好Golang"
	for index, value := range str {
        // value输出的为码表中对应的值(字符类型中有详细说明)
		fmt.Println("index =", index, "value =", value)
        // 以下代码则输出对应值
		// fmt.Printf("index = %v index = %c \n", index, value)
	}
}
# index = 0 value = 20320
# index = 3 value = 22909
# index = 6 value = 71   
# index = 7 value = 111  
# index = 8 value = 108  
# index = 9 value = 97   
# index = 10 value = 110 
# index = 11 value = 103 

注意:for 循环是不能循环 含有中文的字符串

  • for 循环,得到的类型是 uint8 也就是 byte 类型,对应ASCII编码表,而中文字符在ASCII编码表中没有相对应的ID,所以循环含有中文的字符串时会出现乱码

  • 使用 for range 时,得到类型是 int32,对应Unicode编码

匿名变量

以下示例中的 _ 表示匿名变量,在正常情况下我们定义了变量但未使用会抛出错误,而使用匿名变量则可以避免报错

func main() {
    // 切片
	arr := []string{"JavaScript", "Golang", "Node"}
	for _, value := range arr {
		fmt.Println("value = ", value)
	}
}
# value =  JavaScript
# value =  Golang
# value =  Node  
switch case

与 if 条件判断一样,也同样分为了 局部变量写法 和 当前区域内的全局变量的写法 ~

func main() {
	week := 1
	switch week {
	case 4:
		fmt.Println("疯狂星期四 vivo50")
		break
	case 5:
		fmt.Println("周五周五 生龙活虎")
		break
	case 6, 7:
		fmt.Println("快乐周末")
		break
	default:
		fmt.Println("打工仔的苦日子")
	}
}
# 打工仔的苦日子

在 JavaScript 中 switch 中的 break 如果不写表示穿透,而在Go中 switch 的 break 不写倒则没有此影响,Go中 switch 的穿透则需要使用 fallthrough,但是需要注意:fallthrough 仅能穿透紧挨着它的一层(一般项目中也不会这么用,所以看看了解即可),如下所示:

func main() {
	switch week := 5; week {
	case 4:
		fmt.Println("疯狂星期四 vivo50")
	case 5:
		fmt.Println("周五周五 生龙活虎")
		fallthrough
	case 6, 7:
		fmt.Println("快乐周末")
	default:
		fmt.Println("打工仔的苦日子")
	}
}
# 周五周五 生龙活虎
# 快乐周末
case 语句
  • 用于循环语句中跳出循环,并开始执行循环之后的语句
  • break 在 switch 中在执行一条 case 后跳出语句的作用
  • 在多重循环中,可以用标签 如:lable1 标出想 break 的循环,如下所示:
func main() {
lable1:
	for i := 0; i < 2; i++ {
		for j := 0; j < 10; j++ {
			if j == 3 {
				break lable1
			}
			fmt.Printf("i = %v  j= %v \n", i, j)
		}
	}
}
# i = 0  j= 0 
# i = 0  j= 1 
# i = 0  j= 2 
continue

表示立即跳出本次循环,继续下一次循环(仅在 for 循环内使用),与 JavaScript 中的 continue关键字相同

go to

通过标签进行代码间的无条件跳转(可以快速跳出循环,避免重复)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值