Skip to content

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 文件。

学习要点

  1. 简洁性: Go语言语法简洁,没有复杂的特性
  2. 并发性: 内置goroutine和channel支持并发编程
  3. 类型安全: 强类型语言,编译时检查
  4. 垃圾回收: 自动内存管理
  5. 标准库: 丰富的标准库支持
  6. 工具链: 完整的开发工具链

下一步

  • 学习并发编程 (02-concurrency)
  • 学习Web开发 (03-web)
  • 学习微服务架构 (04-microservice)
  • 学习性能优化 (05-performance)
  • 学习部署运维 (06-deployment)