Go 入门 02
语法 · 类型 · 控制流
用最少语法写出可读程序
var变量
:=短声明
for唯一循环
Chapter 02
Go 的语法目标:少而清楚
Go 的语法刻意保持紧凑。官方规范把 Go 描述为强类型、垃圾回收、显式支持并发的通用语言;这种设计落到日常代码里,就是类型要明确、控制流要直接、格式由工具统一。
定义:静态类型
静态类型语言会在编译阶段检查变量和表达式的类型。Go 允许很多类型由编译器推断,但推断之后类型仍然固定。
初学 Go 时,不要追求炫技写法。优先写出能被 gofmt 格式化、能被同伴快速读懂的普通代码。
Variables
变量、常量与零值
Go 声明变量有两种常见方式:var 声明和 := 短变量声明。var 可以用于包级或函数内;:= 只能在函数内部使用。
package main
import "fmt"
func main() {
var name string = "Gopher"
age := 3
const language = "Go"
fmt.Println(name, age, language)
}
Go 变量如果声明但没有显式赋值,会得到该类型的零值。数字是 0,布尔是 false,字符串是空字符串,指针、slice、map、函数、接口、channel 的零值是 nil。
易错点:Go 不允许声明局部变量后完全不用。这个限制会迫使你及时删掉死代码,让程序保持干净。
Types
基础类型与类型转换
Go 常用基础类型包括整数、浮点数、布尔、字符串和字节/字符相关类型。字符串是 UTF-8 字节序列;当你需要逐个 Unicode 码点处理文本时,常会用到 rune。
| 类型 | 例子 | 说明 |
|---|---|---|
int | 42 | 平台相关宽度的有符号整数,日常计数常用 |
float64 | 3.14 | 双精度浮点数 |
bool | true | 只能是 true 或 false |
string | "hello" | 不可变字节序列,通常保存 UTF-8 文本 |
byte | 'A' | uint8 的别名,常用于原始字节 |
rune | '你' | int32 的别名,常表示 Unicode 码点 |
表 1:入门阶段最常遇到的 Go 基础类型。
Go 不会自动在不同数字类型之间隐式转换。需要转换时显式写出来:
var count int = 3
var ratio float64 = float64(count) / 2.0
fmt.Println(ratio)
Pointers
指针只保存地址,不做指针算术
指针是保存变量地址的值。Go 有指针,但没有 C/C++ 那种指针算术;这让你可以表达“我要修改原变量”,同时避免很多底层地址运算错误。
func addOne(number *int) {
*number = *number + 1
}
func main() {
value := 10
addOne(&value)
fmt.Println(value)
}
&value 取地址,*number 访问指针指向的值。初学阶段只要记住:当函数需要修改外部变量,或者复制大结构体代价较高时,指针会出现。
Control Flow
if、for、switch
Go 的条件语句不需要圆括号,但代码块的大括号是必须的。
if score >= 60 {
fmt.Println("pass")
} else {
fmt.Println("retry")
}
Go 只有一个循环关键字:for。它既可以写成经典三段式,也可以写成类似 while 的形式,还可以配合 range 遍历集合。
for index := 0; index < 3; index++ {
fmt.Println(index)
}
count := 0
for count < 3 {
count++
}
names := []string{"Ada", "Ken", "Rob"}
for index, name := range names {
fmt.Println(index, name)
}
switch 适合表达多分支选择。Go 的 switch 默认不会自动贯穿到下一个 case,这比很多 C 系语言更不容易写错。
switch day := "Friday"; day {
case "Saturday", "Sunday":
fmt.Println("weekend")
default:
fmt.Println("weekday")
}
复习速查
:=:函数内部短变量声明。- 零值:未显式赋值时的默认值。
- 显式转换:Go 不自动转换不同数字类型。
- 指针:保存地址,用
&取地址,用*解引用。 for:Go 唯一循环关键字。
参考来源
- The Go Authors. The Go Programming Language Specification. go.dev/ref/spec
- The Go Authors. A Tour of Go. go.dev/tour
- The Go Authors. Effective Go. go.dev/doc/effective_go