Go 的 struct 与方法
Go 用 struct 聚合数据,用方法给类型附着行为,这构成了 Go 面向对象风格的基础表达方式。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 类型系统与抽象 MOC
- 前置概念: Go 指针, Go 函数
- 并列概念: Go 接口
- 关系笔记: Go 中的值、指针与引用语义
Go 的 struct 与方法
一句话定义
struct 是 Go 用来聚合字段的核心复合类型,方法则是附着在类型上的行为定义;两者一起构成了 Go 组织数据和行为的最常见方式。
核心机制 / 工作原理
Go 没有传统类系统,但有:
struct承载数据- 方法接收者承载行为
方法写法大致是:
func (u User) DisplayName() string
func (u *User) Rename(name string)
这里的核心点是接收者:
- 值接收者:通常用于不修改原对象或数据较小的场景
- 指针接收者:通常用于修改对象状态或避免拷贝
最小例子 / 最小场景
type User struct {
Name string
}
func (u User) DisplayName() string {
return u.Name
}
func (u *User) Rename(name string) {
u.Name = name
}
这个例子体现了 Go 的一个典型分工:
- 数据结构本身保持朴素
- 行为通过方法附着
Go 风格里最重要的理解
struct不等于类- 方法只是带接收者的函数
- 组合多个
struct和接口,通常比搭复杂继承树更符合 Go 风格
边界与易混淆点
- 方法调用看起来像面向对象语法,但底层思路更接近“函数 + 接收者”
- 值接收者和指针接收者会影响方法集和接口实现
- 匿名嵌入常用于组合,但它不是传统继承的直接等价物