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

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

DDD
DDD原创
2024-11-15 05:48:02301浏览

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”作为接收者名称。
  • 如果给定类型的一个方法需要一个指针接收器,最佳实践是对其中的 all 方法使用指针接收器类型。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn