第 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 的地址传给输入函数,让函数可以把结果写回变量。第一个返回值是读取数量,不是输入的成绩,因此通常使用 _ 忽略它。
练习题
- 声明姓名、年龄、身高和是否学生 4 个变量,并按完整句子输出。
- 声明摄氏温度
25,根据F = C * 9 / 5 + 32计算华氏温度。 - 输入成绩并输出优秀、良好、及格或不及格;同时校验
0到100的范围。 - 输入年份,根据闰年规则判断是否为闰年。
- 使用
for计算1到100的和。 - 使用循环输出九九乘法表。
- 设定目标数字,循环读取输入实现猜数字游戏,并统计猜测次数。
练习代码位于学习代码仓库的 chapter-01-basics/exercises/,本章相关疑问记录在疑问与思考中。