Golang - 流程控制

if

package main

import "fmt"

func add(x, y int) (int, error) {
	return x + y, nil
}

func main() {

	// 用法 1, 通过已经定义好的变量值进行判断
	n := 12

	if n > 10 {
		fmt.Println(n, "> 10")
	} else {
		fmt.Println(n, "<= 10")
	}

	// 用法 2, 在判断条件中进行变量赋值, 这样不会影响到外部变量, 本例中有 n 在外部已经定义, 但是不会冲突
	if n := 100; n > 10 {
		fmt.Println(n, "> 10")
	} else {
		fmt.Println(n, "<= 10")
	}

	// 用法 3, 调用函数获取返回值, 再进行判断
	if r, _ := add(1, 2); r > 3 {
		fmt.Printf("r: %v, r > 3\n", r)
	} else {
		fmt.Printf("r: %v, r <= 3\n", r)
	}
}

for(go 中没有 while)

package main

import "fmt"

func main() {

	// 根据数量循环
	for i := 0; i < 3; i++ {
		fmt.Println(i)
	}

	// 忽略初始语句(需要提前声明)
	i := 1
	
	for ; i < 10; i++ {
		fmt.Println(i)
	}

	// 忽略初始语句和操作语句
	// 操作变量的步骤写在内部
	// 内部不定义操作变量的步骤则为 while true
	j := 0
	
	for j < 10 {
		fmt.Println(j)
		j++ // 不加这个就是死循环
	}

	// 键值循环 for range
	strA := "abc中国"

	for _, v := range strA {
		fmt.Printf("%c\t", v) // %c 根据编码找字符
	}

	// for循环可以通过break、goto、return、panic强制退出
}

switch

package main

import "fmt"

func main() {
	// 第一种
	a := 3 // 模拟获取选项
	switch a {
	case 1:
		fmt.Println("press 1")
	case 2:
		fmt.Println("press 2")
	default: // 默认选项, 如果上边条件都不符合, 就会进入default
		fmt.Println("输入错误")
	}

	// 第二种, 变量写在条件中, 不会对全局有影响
	switch a := 2; a {
	case 1:
		fmt.Println("press 1")
	case 2:
		fmt.Println("press 2")
	}

	// 多个条件, 相同case, 条件用逗号分隔
	num := 2
	switch num {
	case 1, 3, 5, 7, 9:
		fmt.Println("奇数")
	case 2, 4, 6, 8, 0:
		fmt.Println("偶数")
	}

	// 条件为表达式
	b := 18
	switch { // 若 case 条件为表达式, 这里不需要声明任何东西
	case b < 18:
		fmt.Println("未成年")
	case b >= 18:
		fmt.Println("已成年")
	}

	//fallthrough, 执行满足条件的case和下一个case, 为兼容c中的case设计
	s := "a"
	switch {
	case s == "a":
		fmt.Println("x")
		fallthrough
	case s == "b":
		fmt.Println("b")
	case s == "c":
		fmt.Println("c")
	default:
		fmt.Println("...")
	}

break & continue

package main

import "fmt"

func main() {

	// 跳出循环, 不执行下次
	for i := 0; i < 5; i++ {
		if i == 3 {
			break
		}
		fmt.Println(i)
	}
	fmt.Println("end")  // 结果为: 0 1 2 end
	
	// 停止本次循环, 继续下次
	for i := 0; i < 5; i++ {
		if i == 3 {
			continue
		}
		fmt.Println(i)
	}
	fmt.Println("end")  // 结果为: 0 1 2 4 end
}

goto

  • 常见跳出多层for循环写法
package main

import "fmt"

func main() {
	flag := false

	for i := 0; i < 5; i++ {
		for j := 0; j < 3; j++ {
			if i == 2 && j == 2 {
				flag = true
				break
			}
			fmt.Printf("%v-%v\n", i, j)
		}

		if flag {
			break
		}
	}
	fmt.Println("两层for循环结束")
}
  • goto 标签
// 代码逻辑复杂后, 逻辑容易混乱, 不建议使用
package main

import "fmt"

func main() {
	for i := 0; i < 5; i++ {
		for j := 0; j < 3; j++ {
			if i == 2 && j == 2 {
				// 跳出循环
				goto breakTag
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
	fmt.Println("结束for循环")

breakTag: // 定义一个label
	fmt.Println("label结束for循环")
}

// 执行到goto, 跳转到标签处执行, 再执行标签代码后边的代码 
// 会输出bbbb, 不会输出aaaa, 因为aaaa已经被跳过
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值