首页 > 后端开发 > Golang > 为什么我的 Go 结构体字段在方法调用后会恢复?

为什么我的 Go 结构体字段在方法调用后会恢复?

DDD
发布: 2024-11-15 05:48:02
原创
367 人浏览过

Why Does My Go Struct Field Revert After a Method Call?

结构体字段恢复

在提供的 Go 代码中,观察到一个奇怪的行为,结构体字段在方法内发生更改,但又恢复到其原来的状态事后检查时的原始值。此问题源于以下事实:结构体是通过而不是指针传递。

解释:

在 TVManager 结构体的 sendMessage 方法中,使用 TVManager 结构体的值调用连接器结构体的 sendCommand 方法。当按值传递结构时,将创建并传递结构的副本,而不是对原始结构的引用。

在 MockConnector 结构的 sendCommand 方法中,字段连接器结构(例如,last_command、值)被修改。但是,由于连接器是按值传递的,因此修改仅应用于结构的副本,而不是原始结构。

为了解决此问题,连接器结构中的sendCommand 方法应该通过指针传递,而不是通过值传递。这允许该方法修改原始连接器结构,而不是副本。

解决方案:

替换:

func (this MockConnector) sendCommand(payload map[string]string)
登录后复制

使用:

func (this *MockConnector) sendCommand(payload map[string]string)
登录后复制

其他注意事项:

  • 通常不鼓励在 Go 中使用“this”作为接收者名称。
  • 如果给定类型的一个方法需要指针接收器,则最佳实践是为该类型的 所有 方法使用指针接收器。

以上是为什么我的 Go 结构体字段在方法调用后会恢复?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板