Go-01-基本语法与数据类型
本节目标:掌握 Go 的基本数据类型、运算符、控制流和格式化输出,能独立完成谭浩强《C 程序设计》课后习题级别的程序。
1. 第一个 Go 程序
1 | package main |
Go 程序由 包(package) 组成,main 包是入口。import 引入标准库或第三方包。func 声明函数,main 函数无参数无返回值。
运行:
1 | $ go run hello.go |
编译为可执行文件:
1 | $ go build -o hello hello.go |
2. 基本数据类型
Go 是静态类型语言,类型在编译时确定。常见类型:
| 类型 | 含义 | 零值 | 示例 |
|---|---|---|---|
bool |
布尔 | false |
var ok bool |
int, int8/16/32/64 |
整型 | 0 |
var n int = 42 |
uint, uint8/16/32/64 |
无符号整型 | 0 |
var b byte = 255 |
float32, float64 |
浮点 | 0.0 |
var pi float64 = 3.14 |
complex64, complex128 |
复数 | 0+0i |
var z complex128 = 1 + 2i |
string |
字符串(不可变) | "" |
var s string = "Go" |
byte (= uint8) |
字节 | 0 |
var b byte = 'A' |
rune (= int32) |
Unicode 码点 | 0 |
var r rune = '中' |
类型推断:用 := 可以省略类型:
1 | x := 42 // int |
常量:用 const 声明,可以是无类型常量(更灵活):
1 | const Pi = 3.14159 // 无类型,自动适配 |
3. 数学运算符
Go 的算术运算符和 C 几乎一样:
1 | a, b := 10, 3 |
比较运算符:==, !=, <, <=, >, >=(返回 bool)。
逻辑运算符:&&, ||, !。
位运算符:&, |, ^(异或),&^(位清空),<<, >>。
1 | a, b := 12, 10 |
4. 控制流
if / else
1 | if x > 0 { |
Go 特色:可以在 if 条件前执行一个简短语句(作用域只在 if/else 内):
1 | if err := doSomething(); err != nil { |
for 循环
Go 只有 for 一种循环关键字(没有 while / do-while):
1 | // 经典 for |
switch
Go 的 switch 自动 break,不会 fall-through(除非显式 fallthrough):
1 | day := "Mon" |
type switch(处理 interface{} 的具体类型):
1 | var x interface{} = 42 |
5. 格式化输出(Print 系列)
Go 的 fmt 包提供了和 C 类似但更强大的格式化输出:
1 | name := "Go" |
Sprintf:返回字符串而不是打印。
1 | s := fmt.Sprintf("Hello, %s! pi=%.2f", "Go", pi) |
Fprintf:写到 io.Writer(如文件、网络连接)。
1 | fmt.Fprintf(os.Stderr, "error: %v\n", err) |
6. 谭浩强课后习题实战
例题 1:输入两个整数,输出它们的和、差、积、商、余。
1 | package main |
例题 2:求 1+2+3+…+n。
1 | package main |
例题 3:判断一个数是否为素数。
1 | package main |
例题 4:打印九九乘法表。
1 | package main |
例题 5:求两个数的最大公约数(辗转相除法)。
1 | package main |
7. 类型转换
Go 不支持隐式类型转换,必须显式:
1 | var i int = 42 |
字符串和数字互转用 strconv:
1 | import "strconv" |
8. 指针入门
Go 有指针,但不支持指针运算:
1 | x := 42 |
new 分配零值并返回指针:
1 | p := new(int) // *int,指向 0 |
小结
本节覆盖了 Go 的”谭浩强习题”核心:
- 包/函数/入口
- 9 种基本类型 + 常量
- 算术/比较/逻辑/位运算
- if/for/switch/if 简短语句
- fmt 格式化输出
- 5 道经典课后习题
- 显式类型转换、指针入门
到此可以独立写控制台小程序了。下一节讲数组、切片、Map 和泛型入门。
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/09/01/Go-01-基本语法与数据类型/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!