英文:
How to make nested object oriented function calls in GO
问题
我正在尝试使我的Go应用程序更加面向对象。目前我有以下调用:
groups.AllGroups = GrowGroupsArray(groups.AllGroups)
其中调用了:
func GrowGroupsArray(g []Group) []Group {
newSlice := make([]Group, len(g), 2*cap(g)+1)
copy(newSlice, g)
g = newSlice
return g
}
这在技术上是可以工作的,但我更希望是这样的:
// groups的类型是Groups
// AllGroups的类型是[]Group
groups.AllGroups.GrowGroupsArray()
func (g Groups) GrowGroupsArray() {
newSlice := make([]Group, len(g), 2*cap(g)+1)
copy(newSlice, g)
g.AllGroups = newSlice
}
这样编译是没有问题的,但是当函数完成时(超出作用域),我会遇到运行时恐慌,因为没有将任何内容保存到对象中。我在几个地方遇到了完全相同的问题,第一个示例可以工作,但第二个示例无法将新数组保存到我的对象中。在函数调用后,旧数组仍然存在。任何帮助将不胜感激。
英文:
I'm trying to make my Go application more object oriented. Right now I have the following call:
groups.AllGroups = GrowGroupsArray(groups.AllGroups)
Which calls:
func GrowGroupsArray(g []Group) []Group {
newSlice := make([]Group, len(g), 2*cap(g)+1)
copy(newSlice, g)
g = newSlice
return g
}
This technically works but I would rather this:
//groups is of type Groups
//AllGroups is of type []Group
groups.AllGroups.GrowGroupsArray()
func (g Groups) GrowGroupsArray() {
newSlice := make([]Group, len(g), 2*cap(g)+1)
copy(newSlice, g)
g.AllGroups = newSlice
}
This compiles fine but I get a runtime panic because nothing is being saved to the object when the function is completed (out of scope). I've encountered the exact same issue in several places where the first example works but the second will not save the new array to my object. The old array persists after the function has been called. Any help would be greatly appreciated.
答案1
得分: -1
我只需要做这个:
// groups 是 Groups 类型
// AllGroups 是 []Group 类型
groups.AllGroups.GrowGroupsArray()
func (g *Groups) GrowGroupsArray() { //<- 将其改为指针方法
newSlice := make([]Group, len(g), 2*cap(g)+1)
copy(newSlice, g)
g.AllGroups = newSlice
}
英文:
I just needed to do this:
//groups is of type Groups
//AllGroups is of type []Group
groups.AllGroups.GrowGroupsArray()
func (g *Groups) GrowGroupsArray() { //<- Make this a pointer method
newSlice := make([]Group, len(g), 2*cap(g)+1)
copy(newSlice, g)
g.AllGroups = newSlice
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论