Skip to main content

第 1 章:基础语法

本章目标​

学完本章后,应当能够:

  • 使用 var、:= 和 const 声明数据
  • 认识常用基础类型并进行显式类型转换
  • 使用 if、else if、else 和 switch 做判断
  • 使用 for 完成不同形式的循环
  • 使用 break 和 continue 控制循环
  • 使用 fmt 输出信息并读取控制台输入

第一个 Go 程序​

package main

import "fmt"

func main() {
fmt.Println("Hello, Go!")
}

package main 表示这是一个可执行程序包,main 函数是程序的入口。fmt 是标准库中的格式化输入输出包。

变量、常量和类型​

var name string = "Gopher"
age := 20
const site = "go.dev"

var (
language = "Go"
version = 1.22
)

:= 是短变量声明,只能在函数内部使用。它会根据右侧的值推断类型。已经声明过的变量重新赋值时使用 =:

name := "张三"
name = "李四"

Go 常见的基础类型包括:

var count int = 10
var price float64 = 12.5
var enabled bool = true
var message string = "你好"
var initial rune = 'G'

Go 不会自动进行数值类型转换,需要显式转换:

count := 7
price := 12.5
total := float64(count) * price

输出和格式化​

fmt.Println 适合普通输出,fmt.Printf 适合使用格式占位符:

fmt.Println("年龄:", age)
fmt.Printf("name=%s, age=%d, version=%.2f\n", name, age, version)

常用占位符:

%T    输出类型
%v 输出默认格式的值
%s 字符串
%d 十进制整数
%f 浮点数
%t 布尔值

下面的写法不会解析 %T,因为 Println 会把它当作普通文本:

fmt.Println("version=%T", version) // 输出 version=%T 1.22
fmt.Printf("version=%T\n", version) // 输出 version=float64

判断​

if score < 0 || score > 100 {
fmt.Println("成绩无效")
} else if score >= 90 {
fmt.Println("优秀")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}

switch 可以替代多个条件判断:

switch day {
case 1, 2, 3, 4, 5:
fmt.Println("工作日")
case 6, 7:
fmt.Println("周末")
default:
fmt.Println("日期无效")
}

Go 的 switch 默认不会继续执行下一个 case,通常不需要 break。也可以省略表达式,直接写条件:

switch {
case score >= 90:
fmt.Println("优秀")
case score >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}

循环​

Go 只有 for 关键字:

for i := 1; i <= 5; i++ {
fmt.Println(i)
}

也可以只保留循环条件:

count := 3
for count > 0 {
fmt.Println(count)
count--
}

continue 跳过本轮,break 结束整个循环:

for i := 1; i <= 10; i++ {
if i%2 == 0 {
continue
}
if i > 7 {
break
}
fmt.Println(i)
}

控制台输入​

Go 中常用 fmt.Scan、fmt.Scanln 和 fmt.Scanf 读取输入。它们返回“成功读取的数量”和错误值:

var score int

fmt.Print("请输入成绩:")
_, err := fmt.Scanf("%d", &score)
if err != nil {
fmt.Println("输入错误:", err)
return
}

fmt.Println("成绩是:", score)

&score 表示把 score 的地址传给输入函数,让函数可以把结果写回变量。第一个返回值是读取数量,不是输入的成绩,因此通常使用 _ 忽略它。

练习题​

  1. 声明姓名、年龄、身高和是否学生 4 个变量,并按完整句子输出。
  2. 声明摄氏温度 25,根据 F = C * 9 / 5 + 32 计算华氏温度。
  3. 输入成绩并输出优秀、良好、及格或不及格;同时校验 0 到 100 的范围。
  4. 输入年份,根据闰年规则判断是否为闰年。
  5. 使用 for 计算 1 到 100 的和。
  6. 使用循环输出九九乘法表。
  7. 设定目标数字,循环读取输入实现猜数字游戏,并统计猜测次数。

练习代码位于学习代码仓库的 chapter-01-basics/exercises/,本章相关疑问记录在疑问与思考中。