首页 > 后端开发 > Golang > 为什么我的 Go struct 字段修改后会恢复为原始值?

为什么我的 Go struct 字段修改后会恢复为原始值?

Linda Hamilton
发布: 2024-11-15 15:45:02
原创
856 人浏览过

Why Does My Go Struct Field Revert to Its Original Value When Modified?

Go 中的结构体字段反转

当尝试在 Go 程序中修改结构体中的字段时,您可能会遇到这样的情况:字段似乎恢复到其原始值。出现此问题的原因是 Go 中按值传递结构的方式。

在您的代码中,MockConnector 结构有两个字段:last_command 和 value。 MockConnector 的 sendCommand 方法修改这些字段。但是,当您从 TVManager 结构调用 manager.sendMessage 时,您将连接器实例作为值传递。这意味着 sendCommand 接收连接器结构的副本,而不是对原始结构的引用。

要解决此问题,您需要使用指向所涉及结构的指针。通过传递指向结构的指针,您可以传递对内存中实际结构的引用。这允许您直接修改结构体的字段。

更正的代码:

func (this *MockConnector) sendCommand(payload map[string]string) {
    fmt.Println("0", this)
    this.last_command = payload
    this.value = true
    fmt.Println("0", this)
}
登录后复制

通过修改 sendCommand 方法来接收指向 MockConnector 结构体的指针,现在,您可以修改实际的连接器实例,而不仅仅是副本。

接收器名称:

此外,避免在 Go 中使用此作为接收器名称被认为是最佳实践结构方法。相反,使用更具描述性的名称来指示接收器的类型。

一致方法集:

如果结构体中的一个方法需要指针接收器,建议使该结构中的所有方法都使用指针接收器。这可以确保方法集中的一致性,无论接收者是值还是指针。

通过应用这些建议,您可以消除 Go 程序中字段值恢复的问题。

以上是为什么我的 Go struct 字段修改后会恢复为原始值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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