如何在 Go 中正确创建并返回结构体实例


在 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 函数,既符合语言哲学,也提升代码可读性、可测试性与复用性。


# go  # 作用域  # 代码可读性  # 构造函数  # 结构体  # 指针  # function  # 对象  # 推荐使用  # 将其  # 自定义  # 不支持  # 可选  # 应在  # 这会  # 也未  # 结束时  # 或不 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11快速助手怎么用_Win11远程协助连接教程【工具】  php增删改查需要哪些扩展_开启mysqli或pdo扩展方法【说明】  Windows10如何更改开机密码_Win10登录选项更改密码教程  如何有效拦截拼接式恶意域名的垃圾信息  php8.4匿名类怎么用_php8.4匿名类创建与使用场景【介绍】  c++20的std::format怎么用 比printf更安全高效的格式化方法【详解】  XSLT怎么生成动态的HTML属性名和标签名  Python技术债务管理_长期维护解析【教程】  Win10系统更新错误0x80240034怎么办 Win10更新错误解决法【方法】  Win11怎么关闭小组件_Win11禁用任务栏天气与小组件方法【设置】  Windows系统时间服务错误_W32Time服务修复与同步教学  Python装饰器复用技巧_通用能力解析【教程】  Linux如何申请SSL免费证书_Linux下Certbot安装与Nginx自动续期【指南】  Windows蓝屏错误0x0000001E怎么修复_KMODEEXCEPTIONNOTHANDLED排查  Linux如何使用grep搜索文件内容_Linux下正则表达式匹配与查找技巧【指南】  c++中的std::conjunction和std::disjunction是什么_c++模板元编程逻辑运算【C++17】  Windows10如何更改系统字体大小_Win10辅助功能文本缩放设置  Windows10如何更改鼠标图标_Win10鼠标属性指针浏览  为什么本地php环境运行php脚本卡顿_php执行效率优化方法与设置【说明】  LINUX怎么进行文本内容搜索_Linux grep命令正则表达式用法大全【教程】  php转mp4怎么保留字幕_php处理带字幕视频转换说明【说明】  Windows10系统服务优化指南_Win10禁用不必要服务提升性能  Win11怎么设置麦克风权限_允许应用访问Win11麦克风【详解】  Win11声音忽大忽小怎么办 Win11音频增强功能关闭教程【修复】  Win11怎么关闭系统提示音_Windows11声音方案设为无声教程  如何使用Golang实现负载均衡_分发请求到多个服务节点  c++中如何使用虚函数实现多态_c++多态性实现原理  Mac怎么设置鼠标滚动速度_Mac鼠标设置详细参数  Windows10电脑怎么设置防火墙出站规则_Win10禁止程序联网教程  Win11如何关闭游戏模式 Win11禁用Xbox Game Bar录制【优化】  Win11怎么更改电脑名称_Windows 11修改计算机名操作指南【步骤】  php命令行怎么运行_通过CLI模式执行PHP脚本的步骤【说明】  Go 中 defer 语句在 goroutine 内部不返回时不会执行  Win11怎么关闭通知消息_屏蔽Windows 11右下角弹窗通知设置【详解】  Mac的Time Machine怎么用_Mac系统备份与数据恢复【完整指南】  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  Mac如何彻底清理浏览器缓存?(Safari与Chrome)  Python网络超时处理_健壮性设计说明【指导】  Windows10如何更改鼠标灵敏度_Win10鼠标属性指针选项调节  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  Python对象比较与排序_集合使用说明【指导】  Win11如何连接Xbox手柄 Win11蓝牙连接游戏手柄教程【步骤】  Win11如何设置系统声音_Win11系统声音调整教程【攻略】  如何在JavaScript中动态拼接PHP的base_url与JS变量  Python函数接口稳定性_版本演进解析【指导】  PythonWeb前后端整合项目教程_FastAPIReact完整实例  Win11怎么设置任务栏对齐方式_Windows11个性化任务栏行为  Mac如何查看电池健康百分比_Mac系统信息电源检测  如何使用Golang反射将map转换为struct_Golang reflect类型映射技巧  php怎么捕获异常_trycatch结构处理运行时错误的技巧【方法】 

 2026-01-05

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.