
在 go 中,不应在方法内创建新对象却不返回它,这会导致内存浪费和逻辑混乱;推荐使用独立的构造函数(如 newxxx)来初始化并返回结构体指针。
Go 语言强调清晰、高效与显式语义。你提供的代码中,CreateObject() 方法在接收者 *SelfInitialisator 的上下文中新建了一个 SelfInitialisator 实例,但既未返回该实例,也未将其赋值给任何外部变量——这意味着该对象在方法作用域结束时即被垃圾回收,完全无实际用途,属于典型的“创建即丢弃”反模式。
✅ 正确做法:使用命名构造函数(Factory Function),例如 NewSelfInitialisator():
func NewSelfInitialisator() *SelfInitialisator {
s := new(SelfInitialisator)
s.Fields1 = "Hello"
s.Fields2 = "Foo"
return s
}调用方式简洁明确:
s := NewSelfInitialisator() s.Method1() // 输出: Hello Foo
? 补充建议:
- 构造函数名遵循 Go 惯例:以 New 开头,首字母大写(导出),清晰表明其职责是创建并返回新实例;
- 若需可选初始化参数(如自定义字段值),可扩展为:
func NewSelfInitialisator(f1, f2 string) *SelfInitialisator { return &SelfInitialisator{Fields1: f1, Fields2: f2} } - 避免在方法中 new(T) 或 &T{} 后不返回或不关联到状态——除非是内部缓存、日志临时对象等有明确生命周期管理的场景。
总结:Go 不支持传统意义上的“构造方法”,而是通过普通函数实现对象创建。将初始化逻辑集中于 NewXXX 函数,既符合语言哲学,也提升代码可读性、可测试性与复用性。










