Files
2026-03-14 19:03:12 +08:00

1.5 KiB

03-embedding - 组合与类型断言

知识点讲解

结构体嵌入(组合)

type Address struct {
    City    string
    Street  string
}

type Person struct {
    Name    string
    Address Address  // 嵌套结构体
}

type Employee struct {
    Person        // 匿名嵌入
    EmployeeID int
}

emp := Employee{
    Person: Person{Name: "张三"},
}
fmt.Println(emp.Name)  // 可以直接访问嵌入的字段

接口嵌入

type Reader interface {
    Read() string
}

type Writer interface {
    Write(s string)
}

type ReadWriter interface {
    Reader
    Writer  // 接口组合
}

类型断言

var i interface{} = "hello"

// 方式1:标准断言
s := i.(string)

// 方式2:带检查
s, ok := i.(string)
if !ok {
    fmt.Println("类型断言失败")
}

类型选择

func printValue(v interface{}) {
    switch v.(type) {
    case int:
        fmt.Println("整数:", v)
    case string:
        fmt.Println("字符串:", v)
    default:
        fmt.Println("未知类型")
    }
}

重要提示

  • Go使用组合而非继承
  • 结构体嵌入可以实现类似继承的效果
  • 类型断言若失败会panic,需谨慎使用
  • 类型选择用于处理多种类型

学习目标

完成本练习后,你将:

  • ✅ 掌握结构体嵌入的使用
  • ✅ 理解接口嵌入的概念
  • ✅ 学会使用类型断言
  • ✅ 掌握类型选择的使用

练习说明

打开 main.go,根据注释提示填充代码,完成后运行 go test -v 验证答案。