Golang基础-3

发布于:2024-03-29 ⋅ 阅读:(18) ⋅ 点赞:(0)

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中条件语句、选择语句、循环语句、break、continue、goto关键字等相关知识。

基础

1. 条件语句
  • 实现程序逻辑时,需要通过不同的判断条件去执行相应的语句。
  • Go语言中的条件语句通过判断条件是否为 true/false 来决定执行相关语句。
  • Go语言中条件语句有 if、if else、if else if等
package main

import "fmt"

func main() {
	var a int = 16

	// 单分支,大括号必须存在,Go语言格式严格
	if a == 16 {
		fmt.Println("a == 16")
	}

	// 双分支
	a = 20
	if a != 20 {
		fmt.Println("a != 20")
	} else {
		fmt.Println("a == 20")
	}

	// 多分支,else if 分支任意数量、最后的 else 可选
	a = 40
	if a <= 20 {
		fmt.Println("a <= 20")
	} else if a <= 40 {
		fmt.Println("a <= 40")
	} else if a <= 60 {
		fmt.Println("a <= 60")
	} else {
		fmt.Println("a > 60")
	}

	// 局部变量,仅在条件语句作用域内可访问
	a = 30
	if s := 16; s == a {
		fmt.Println("s == a")
	} else {
		fmt.Println("s != a")
	}

	// 分支嵌套,可任意嵌套,实际开发中不要嵌套太多层,嵌套太多层的代码需要优化设计
	a = 80
	if a > 60 {
		if a > 80 {
			fmt.Println("a > 80")
		} else {
			fmt.Println("a <= 80")
		}
	} else if a > 40 {
		if a > 50 {
			fmt.Println("a > 50")
		} else {
			fmt.Println("a <= 50")
		}
	} else {
		fmt.Println("a <= 40")
	}
}

输出结果
a == 16
a == 20
a <= 40
s != a
a <= 80

2. 选择语句
  • 根据输入条件的不同选择不同的语句块进行执行(多分支)
  • 基本语法
switch 表达式 {
	case 值1, 值2... :
		语句块1
	case 值3, 值4... :
		语句块2
	...
	default : 
		语句块
}
  • switch后边是一个表达式(常量值、变量、具有返回值的函数等)
package main

import "fmt"

func main() {
	var a int = 16
	var str string = "id"
	const c int = 20

	// switch后边是常量值
	switch 20 {
	case 20:
		fmt.Println("20")
	default:
		fmt.Println("***")
	}
	// switch后边是变量
	switch a {
	case 20:
		fmt.Println("20")
	default:
		fmt.Println(a)
	}
	// switch后边是常量
	switch c {
	case 20:
		fmt.Println("20")
	default:
		fmt.Println(c)
	}
	// switch后边是字符串
	switch str {
	case "id":
		fmt.Println("id")
	default:
		fmt.Println(str)
	}
	// switch后边是函数
	switch getValue() {
	case 30:
		fmt.Println("30")
	default:
		fmt.Println("***")
	}
}

func getValue() int {
	return 30
}

输出结果
20
16
20
id
30

  • switch后边可不带表达式,当作if使用
package main

import "fmt"

func main() {
	var a int = 20
	// switch后边自定义局部变量
	switch {
	case a == 20:
		fmt.Println("a == 20")
	default:
		fmt.Println(a)
	}
}

输出结果:a == 20

  • switch后边可直接声明/定义一个变量,分号结束
package main

import "fmt"

func main() {
	// switch后边自定义局部变量
	switch s := 10; s {
	case 10:
		fmt.Println("10")
	default:
		fmt.Println(s)
	}
}

输出结果:10

  • switch语句分支Go语言默认执行完符合条件的case后会自动break(跳出switch语句块),若要执行完当前分支后继续执后一个分支,需要在分支中添加关键字fallthrough
package main

import "fmt"

func main() {
	var a int = 20
	// case 分支使用 fallthrough 穿透
	switch {
	case a == 20:
		fmt.Println("a == 20")
		fallthrough
	case a != 20:
		fmt.Println("a != 20")
	default:
		fmt.Println(a)
	}
}

输出结果
a == 20
a != 20

  • case后值的数据类型必须和switch后表达式的数据类型一致
  • case后可跟多个表达式,使用逗号分隔
package main

import "fmt"

func main() {
	var a int = 20
	// case 分支多个值
	switch a {
	case 10, 30:
		fmt.Println("10, 30")
	case 20:
		fmt.Println("20")
	default:
		fmt.Println(a)
	}
	// case 分支多个表达式
	switch {
	case a < 10, a > 30:
		fmt.Println("a < 10, a > 30")
	case a >= 10, a <= 30:
		fmt.Println("a >= 10, a <= 30")
	default:
		fmt.Println(a)
	}
}

输出结果
20
a >= 10, a <= 30

  • case后边为值时,各case分支的值不能重复
  • default语句是可选的
3. 循环语句
  • 实际需要重复执行一段代码时,需要循环结构
  • Go语言中使用 for 支持循环结构
  • break关键字用于跳出当前循环结构
  • continue关键字用于当前循环结构中,表示这一轮循环从当前位置结束,返回去重新开始执行下一轮循环
  • for 循环可嵌套,切记注意程序执行效率
  • for 循环基本语法格式
for 初始表达式; 布尔表达式; 迭代因子 {
	循环体
}
  • for-range 用于遍历可迭代对象中的每个元素,例如字符串,数组,切片,映射,通道等
package main

import "fmt"

func main() {
	// 计算数字 1~100 加法
	var sum int = 0

	// 标准 for 循环
	for i := 1; i <= 100; i++ {
		sum += i
	}
	fmt.Println("1 sum: ", sum)

	// for 省略初始化因子
	sum = 0
	var i int = 1
	for ; i <= 100; i++ {
		sum += i
	}
	fmt.Println("2 sum: ", sum)

	// for 省略初始化因子、迭代因子,类似 while 循环
	sum = 0
	i = 1
	for i <= 100 {
		sum += i
		i++
	}
	fmt.Println("3 sum: ", sum)

	// 无限 for 循环
	sum = 0
	i = 1
	for {
		if i <= 100 {
			sum += i
		} else { // i > 100
			break // 注意此处使用 break 跳出 for 循环
		}
		i++
	}
	fmt.Println("4 sum: ", sum)
}

输出结果
1 sum: 5050
2 sum: 5050
3 sum: 5050
4 sum: 5050

package main

import "fmt"

func main() {
	// for-range
	var str string = "今天是sheme天气"
	for i, v := range str {
		fmt.Printf("index: %d, value: %c\n", i, v)
	}
}

输出结果
index: 0, value: 今
index: 3, value: 天
index: 6, value: 是
index: 9, value: s
index: 10, value: h
index: 11, value: e
index: 12, value: n
index: 13, value: m
index: 14, value: e
index: 15, value: 天
index: 18, value: 气

package main

import "fmt"

func main() {
	// for 循环嵌套
	for i := 1; i < 10; i++ {
		for j := i; j < 10; j++ {
			fmt.Printf("%v * %v = %v\t", i, j, i*j)
		}
		fmt.Printf("\n")
	}
}

输出结果
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9
2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18
3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27
4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36
5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45
6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54
7 * 7 = 49 7 * 8 = 56 7 * 9 = 63
8 * 8 = 64 8 * 9 = 72
9 * 9 = 81

  • break跳出循环体
package main

import "fmt"

func main() {
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时跳出 for 循环
			break
		}
		fmt.Println(i)
	}
}

输出结果
0
1

  • continue停止当前循环体,开始下一轮循环体
package main

import "fmt"

func main() {
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时,重新执行下一轮循环
			continue
		}
		fmt.Println(i)
	}
}

输出结果
0
1
3

4. goto关键字
  • 尽量少使用 goto 关键字
  • 通过 goto 语句可以任意跳转到当前函数指定的 label 位置
package main

import "fmt"

func main() {
	fmt.Println("-----1-----")
	fmt.Println("-----2-----")
	fmt.Println("-----3-----")
	goto END
	fmt.Println("-----4-----")
	fmt.Println("-----5-----")
END:
	fmt.Println("-----6-----")
}

输出结果
-----1-----
-----2-----
-----3-----
-----6-----

  • break 和 continue 后也可以指定 label 用于指定跳出或跳过指定 label 同层级的循环
package main

import "fmt"

func main() {
END1:
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时,执行跳转
			continue END1
		}
		fmt.Println("-----", i, "-----")
	}

END2:
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时,执行跳转
			break END2
		}
		fmt.Println("=====", i, "=====")
	}
}

输出结果
----- 0 -----
----- 1 -----
----- 3 -----
===== 0 =====
===== 1 =====

起始

本文含有隐藏内容,请 开通VIP 后查看