Golang struct 结构体核心概念:声明、组合与 Method

沈亦白
沈亦白
发布时间:2026-10-13| 3人浏览过
原创

Golang 语言放弃了包括传统类继承在内的大部分面向对象特性,转而采用“组合优于继承”的设计哲学。本文重点讲解 struct(结构体)的基础操作,涵盖声明、带名/位置初始化、使用匿名字段模拟继承以及 Method Receiver 的调用规则。

结果或目标

理解 struct 作为一组字段集合的本质,掌握如何灵活定义数据模型并利用组合替代复杂的类层次结构。

准备条件

  • go 环境已安装并可运行。
  • 具备基础的 Golang fmt 包使用经验。

真实操作顺序

第1步:Struct 的结构化声明与初始化

目的:定义包含多个字段的自定义类型,并学习不同的实例赋值方式。 动作:

type person struct {
    name string
    age  int
}

func main() {
    // 1. 零值初始化后逐个赋值
    var p person
    p.name = "tom"
    p.age = 25
    fmt.Println(p.name)

    // 2. 位置参数初始化(必须按声明顺序)
    p1 := person{"Tom1", 25}
    fmt.Println(p1.name)

    // 3. 命名参数初始化(推荐,更清晰且支持乱序)
    p2 := person{name: "Tom", age: 24}
    fmt.Println(p2.name)
}

第2步:利用匿名字段实现结构体的组合

目的:通过将一个结构体作为另一个结构体的“匿名”成员,实现字段的复用与继承效果。 入口:定义新的 Struct 时直接写入内嵌类型名。

type Human struct {
    name   string
    age    int
    weight int
}

// Student 包含了 Human 的所有字段
// tyep -> type (原文拼写错误已修正)
type Student struct {
    Human       // 匿名字段
    speciality string
}

重要参数与状态:

  • 字段访问优先级:当外层级与内层级字段重名时,优先取外层的。完成判断:外层同名字段覆盖内层字段可见性。
  • 显式访问内层:可通过指定 struct 名访问内部字段,如 mark.Human。操作示例:mark.Human.age -= 1。
  • 灵活性:不仅限于 struct 间嵌套,自定义类型和内置类型均可作为匿名字段,并可直接在相应字段上执行方法。

第3步:Method Receiver 的传递机制

目的:为 struct 绑定方法,控制是对原对象还是副本进行操作。 动作:

type Rect struct {
    x, y     float64
    width, height float64
}

// 值接收者:副本操作,不改变原对象
func (r Rect) Area() float64 {
    return r.width * r.height
}

// 指针接收者:原对象操作
func (b *Box) SetColor(c Color) {
    b.color = c
}

行为差异说明:

  • Receiver 默认以值传递:修改 receiver 的参数不会影响外部原始变量。
  • 指针接收者 (*T):对实例对象的内容发生实际修改。注意:若 method 的 receiver 是 *T,调用时可传入 T 类型的变量 V,编译器自动解引用处理,无需手动使用 &V。

第4步:Method 的组合与重写

目的:展示组合模式下的方法调用链以及如何扩展或覆盖基类行为。

func (h *Human) SayHi() {
    fmt.Println(h.name)
}

func (e *Student) SayHi() {
    // 调用父级方法
    e.Human.SayHi()
    // 扩展行为
    fmt.Println(e.School)
}

完成判断:Student 实例既可调用嵌入 Human 的方法,也可调用自己定义的 SayHi 实现方法的“重写”,体现了 Golang 面向接口与组合的编程风格。

简要总结

Golang 中的 struct 提供了轻量级的数据类型封装能力,通过匿名字段实现灵活的代码组合而非复杂的继承树。掌握值/指针接收者的区别对于内存管理与数据一致性至关重要。以上就是 Golang 结构体 struct 及其方法组合特性的详细内容,更多关于 Golang 面向对象编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。