
go 语言不鼓励在方法接收者中使用 `this`(或 `self`、`me`)等泛化名称,虽无技术限制,但违背官方代码审查惯例,且易引发对值/指针语义的误解。
在 Go 中,方法接收者的命名完全由开发者自主决定,语法上允许使用 this、self 甚至 me —— 例如:
type MyStruct struct {
someField string
}
func (this MyStruct) getSomeField() string { // ✅ 语法合法,但不推荐
return this.someField
}这段代码能正常编译和运行,不存在任何技术障碍。然而,Go 官方《Code Review Comments》明确指出:
Don’t use generic names such as "me", "this" or "self", identifiers typical of object-oriented languages that place more emphasis on methods as opposed to functions.
其核心原因在于 Go 的设计哲学:Go 并非面向对象语言,而是面向组合与函数的简洁系统。方法(method)在 Go 中本质上是“带接收者的函数”,而非类成员;接收者更应体现语义角色(如 s 表示 struct 实例、c 表示 cache、r 表示 reader),而非抽象的“自身”。
此外,this 在 Java/C++/Python 等语言中永远是隐式指针,而 Go 的接收者可以是值类型或指针类型:
func (s MyStruct) valueMethod() {} // s 是副本,修改不影响原值
func (s *MyStruct) ptrMethod() {} // s 是指针,可修改原值若统一用 this,会模糊这一关键差异,误导读者认为“总是可变”或“总是安全复制”,增加维护风险。
✅ 推荐实践:
- 使用短小、具名、语义清晰的接收者标识符(如 s, m, cfg, r);
- 若结构体类型明确,可直接用首字母缩写(u User、db DB);
- 保持一致性:同一包内同类结构体尽量采用相同风格。
⚠️ 注意事项:
- 不要为“看起来像 OOP”而牺牲 Go 的惯用法;
- this 不是关键字,但滥用会降低代码可读性与团队协作效率;
- golint 和 staticcheck 等工具虽不强制报错,但现代 Go 代码审查(如 GitHub PR)普遍将 this/self 视为风格问题并要求修正。
总之,Go 的优雅在于克制与约定——少即是多。放弃 this,拥抱清晰、轻量、符合生态的命名习惯,才是地道的 Go 风格。










