Go语言基础语法示例
概述
本文档展示了Go语言的基础语法特性,包括变量声明、控制结构、函数、数组切片、映射、结构体、接口、错误处理等。
运行示例
bash
cd apps/go/examples/01-basics
go run main.go
运行测试
bash
# 运行所有测试
go test -v
# 运行基准测试
go test -bench=.
# 生成覆盖率报告
go test -coverprofile=coverage.out
go tool cover -html=coverage.out -o coverage.html
代码示例
1. 变量声明和类型
go
// 基本数据类型
var name string = "Go语言"
var age int = 25
var height float64 = 175.5
var isStudent bool = true
// 短变量声明
country := "中国"
city := "北京"
// 常量
const PI = 3.14159
const (
StatusOK = 200
StatusError = 500
)
2. 控制结构
go
// if条件语句
score := 90
if score >= 90 {
fmt.Println("优秀")
} else if score >= 80 {
fmt.Println("良好")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
// for循环
for i := 0; i < 5; i++ {
fmt.Printf("%d ", i)
}
// range循环
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("[%d:%d] ", index, value)
}
3. 函数
go
// 基本函数
func add(a, b int) int {
return a + b
}
// 多返回值函数
func divide(a, b int) (int, int) {
return a / b, a % b
}
// 可变参数函数
func sumAll(numbers ...int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
4. 数组和切片
go
// 数组
var arr [5]int = [5]int{1, 2, 3, 4, 5}
// 切片
slice := []int{1, 2, 3, 4, 5}
slice1 := slice[1:3] // 从索引1到3(不包含3)
// 追加元素
slice = append(slice, 6, 7)
// 使用make创建切片
newSlice := make([]int, 3, 5)
5. 映射
go
// 创建映射
person := map[string]interface{}{
"name": "张三",
"age": 25,
"city": "北京",
"height": 175.5,
}
// 访问映射
fmt.Printf("姓名: %s\n", person["name"])
// 检查键是否存在
if age, exists := person["age"]; exists {
fmt.Printf("年龄: %v\n", age)
}
// 删除键
delete(person, "height")
6. 结构体
go
type Person struct {
Name string
Age int
Email string
Height float64
}
// 结构体方法
func (p Person) Introduce() string {
return fmt.Sprintf("我叫%s,今年%d岁,身高%.1fcm", p.Name, p.Age, p.Height)
}
// 指针接收者的方法
func (p *Person) Birthday() {
p.Age++
}
7. 接口
go
type Animal interface {
Speak() string
Move() string
}
type Dog struct {
Name string
}
func (d Dog) Speak() string {
return "汪汪"
}
func (d Dog) Move() string {
return "跑步"
}
8. 错误处理
go
// 安全的除法函数
func safeDivide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("除数不能为零")
}
return a / b, nil
}
// 使用错误处理
result, err := safeDivide(10, 2)
if err != nil {
fmt.Printf("错误: %v\n", err)
} else {
fmt.Printf("10 ÷ 2 = %d\n", result)
}
9. defer详解
go
// defer基本用法
defer fmt.Println("函数结束时执行")
// 多个defer的执行顺序(LIFO)
defer fmt.Println("第1个defer")
defer fmt.Println("第2个defer")
defer fmt.Println("第3个defer")
// defer参数立即求值
message := "Hello"
defer fmt.Printf("defer捕获的message: %s\n", message)
message = "World"
测试示例
Go语言内置了强大的测试框架,支持:
- 单元测试
- 基准测试
- 示例函数
- 并行测试
- 测试覆盖率
详细测试示例请查看 main_test.go
文件。
学习要点
- 简洁性: Go语言语法简洁,没有复杂的特性
- 并发性: 内置goroutine和channel支持并发编程
- 类型安全: 强类型语言,编译时检查
- 垃圾回收: 自动内存管理
- 标准库: 丰富的标准库支持
- 工具链: 完整的开发工具链
下一步
- 学习并发编程 (02-concurrency)
- 学习Web开发 (03-web)
- 学习微服务架构 (04-microservice)
- 学习性能优化 (05-performance)
- 学习部署运维 (06-deployment)