go - 将结构切片附加到另一个
问题描述
我是 Golang 的新手,正在尝试将一个结构切片的内容附加到另一个实例中。数据被附加,但在方法之外是不可见的。下面是代码。
package somepkg
import (
"fmt"
)
type SomeStruct struct {
Name string
Value float64
}
type SomeStructs struct {
StructInsts []SomeStruct
}
func (ss SomeStructs) AddAllStructs(otherstructs SomeStructs) {
if ss.StructInsts == nil {
ss.StructInsts = make([]SomeStruct, 0)
}
for _, structInst := range otherstructs.StructInsts {
ss.StructInsts = append(ss.StructInsts, structInst)
}
fmt.Println("After append in method::: ", ss.StructInsts)
}
然后在主包中初始化结构并调用 AddAllStructs 方法。
package main
import (
"hello_world/somepkg"
"fmt"
)
func main() {
var someStructs = somepkg.SomeStructs{
[]somepkg.SomeStruct{
{Name: "a", Value: 1.0},
{Name: "b", Value: 2.0},
},
}
var otherStructs = somepkg.SomeStructs{
[]somepkg.SomeStruct{
{Name: "c", Value: 3.0},
{Name: "d", Value: 4.0},
},
}
fmt.Println("original::: ", someStructs)
fmt.Println("another::: ", otherStructs)
someStructs.AddAllStructs(otherStructs)
fmt.Println("After append in main::: ", someStructs)
}
上面的程序输出如下:
original::: {[{a 1} {b 2}]}
another::: {[{c 3} {d 4}]}
After append in method::: [{a 1} {b 2} {c 3} {d 4}]
After append in main::: {[{a 1} {b 2}]}
我试图了解我在这里缺少什么,因为数据在方法中是可见的。感谢您对此的任何帮助。
-- 阿诺普
解决方案
使用指针接收器:
func (ss *SomeStructs) AddAllStructs(otherstructs SomeStructs) {
if ss.StructInsts == nil {
ss.StructInsts = make([]SomeStruct, 0)
}
for _, structInst := range otherstructs.StructInsts {
ss.StructInsts = append(ss.StructInsts, structInst)
}
fmt.Println("After append in method::: ", ss.StructInsts)
}
如果方法需要改变接收者,接收者必须是一个指针
推荐阅读
- javascript - 当我添加 this.physics 行时,Phaser ARCADE 物理不起作用
- multithreading - 尝试从 servlet 创建线程以侦听 rabbitmq 队列时,Websphere JNDI 查找失败
- python - 在python计算中使用符号形成字符串
- python - 在 Python 中使用 openpyxl.utils
- firebase - 错误:错误状态:无法获取 DocumentSnapshotPlatform 上不存在的字段
- javascript - 雨果和 js。在滚动时将标题添加到标题
- python - 使用 seaborn 绘图会导致 python 内核崩溃
- tailwind-css - 使用tailwindcss强制div占据父级的最大宽度
- java - DirectProcessor 的替代品是什么
- c# - 调用 Microsoft Graph API 身份验证/phoneMethods 时出错 - 'Unexpected Segment OpenPropertySegment。预期属性/$value'