3 回答
TA贡献1942条经验 获得超3个赞
使用指针接收器:
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)
}
如果方法需要改变接收者,接收者必须是一个指针
TA贡献1789条经验 获得超8个赞
您必须返回以下结果append:
package main
import (
"fmt"
)
func main() {
// Wrong
var x []int
_ = append(x, 1)
_ = append(x, 2)
fmt.Println(x) // Prints []
// Write
var y []int
y = append(y, 1)
y = append(y, 2)
fmt.Println(y) // Prints [1 2]
}
TA贡献1842条经验 获得超12个赞
您可以通过使用指针接收器而不是值接收器轻松解决此问题。
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)
}
记住在 go 中,如果你看到一个切片内部结构,它是一个包含指向数据结构指针的结构。
所以主要的切片不知道新附加切片的容量并且已经打印了相同的切片。
其次,您不必返回附加切片的结果。这里指针接收者来救援,因为值接收者不能改变原始值。
在 go playground 运行代码: https ://play.golang.org/p/_vxx7Tp4dfN
- 3 回答
- 0 关注
- 103 浏览
添加回答
举报