Skip to content

分支结构

与 C 语言不同的是: Go 流程控制语句中的条件表达式不需要用括号括起来

txt
if 判断表达式 {
  条件成立执行
}

单分支

go
package main

import "fmt"

func main() {
	num := 10
	if num > 20 {
		fmt.Println("num 大于 20")
	}
}

双分支

go
package main

import "fmt"

func main() {
	num := 10
	if num > 20 {
		fmt.Println("num 大于 20")
	} else {
	  fmt.Println("num 小于/等于 20")
	}
}

多分支-if

go
package main

import "fmt"

func main() {
	num := 10
	if num > 20 {
		fmt.Println("num 大于 20")
	} else if num == 20 {
	  fmt.Println("num 等于 20")
	} else {
    fmt.Println("num 小于 20")
	}
}

多分枝-switch

go
package main

import "fmt"

func main() {
	num := 10

	switch num {
	case 10:
		fmt.Println("num=10")
		break
	case 20:
		fmt.Println("num=20")
		break
	case 30:
		fmt.Println("num=30")
		break
	default:
		fmt.Println("num is unknown")
		break
	}
}

循环结构

与 C 语言不同的是: Go 循环结构只有 for 语句, 没有 while 语句

go
package main

import "fmt"

func main() {
	// 第 1 种写法:
	// 初始化变量; 结束条件; 值变化语句
	for i := 0; i < 10; i++ {
		fmt.Println("i =", i)
	}
	fmt.Println()

	// 第 2 种写法:
	// 初始化变量; 结束条件
	for j := 10; j <= 20; {
		fmt.Println("j =", j)

		if j == 15 {
			j++
			continue
		}

		// 值变化语句
		j++
	}
	fmt.Println()

	// 第 3 种写法: 类似 while 循环的写法
	k := 20      // i := 0  初始化变量
	for k < 30 { // i <= 10 结束条件
		fmt.Println("k =", k)

		if k == 25 {
			break
		}

		// 值变化语句
		k++
	}
	fmt.Println()

	// 第 4 种写法: 使用 range 关键字
	for n := range 10 {
		fmt.Println("n =", n)
	}
	fmt.Println()

	// 第 5 种写法: 同时获取 索引 和 值
	str := "hello world"
	for key, val := range str {
		fmt.Printf("key = %d, val = %c \n", key, val)
	}
}

练习: 实现猜数字游戏

获取用户输入

  • fmt.Scanln
  • fmt.Scanf
go
package main

import (
	"fmt"
)

func main() {
	n := 10
	fmt.Println("please input a number: ")

	// 获取终端输入, &n 将值绑定到变量上
	fmt.Scanln(&n)

  fmt.Println("the number is: ", n)
}

获取一个随机数

  • math/rand
  • rand.Intn(10)
go
package main

import (
	"fmt"
	"math/rand"
)

func main() {
	n := rand.Intn(10)
	fmt.Println("the number is: ", n)
}

实现:猜数字游戏

主要是为了练习: for循环 + 条件判断

go
package main

import (
	"fmt"
	"math/rand"
)

func main() {
	// 谜底
	anwser := rand.Intn(10)

	// 机会次数
	chances := 3

	// 获取用户输入
	for chances > 0 {
		var input int
		fmt.Println("请输入一个 1~10 的数字: ")
		fmt.Scanln(&input)

		if input > anwser {
			chances--
			fmt.Println("你猜的数字太大了")
		} else if input < anwser {
			chances--
			fmt.Println("你猜的数字太小了")
		} else {
			fmt.Println("恭喜你猜对了, 你赢了")
			break
		}

		if chances == 0 {
			fmt.Println("很遗憾, 你用完了所有的机会, 你输了")
			break
		}

		fmt.Printf("你还有 %d 次机会 \n", chances)
	}
}

Released under the MIT License.