Go 如何在方法中更改函数引用字段?
如何使initEvents方法内部的更改保持不变?也就是说,我想在initEvents方法中更改函数reference Top::Events::SomeFunc的值,并在initEvents方法返回后保持该更改。您的代码进行了一些小的修改,以使其可编译 顶部没有包裹声明 您没有为函数Foo指定整数返回类型 为了方便起见,我在下面提供了一个完整的代码示例,如果您想自己运行,可以在以下位置执行:Go 如何在方法中更改函数引用字段?,go,Go,如何使initEvents方法内部的更改保持不变?也就是说,我想在initEvents方法中更改函数reference Top::Events::SomeFunc的值,并在initEvents方法返回后保持该更改。您的代码进行了一些小的修改,以使其可编译 顶部没有包裹声明 您没有为函数Foo指定整数返回类型 为了方便起见,我在下面提供了一个完整的代码示例,如果您想自己运行,可以在以下位置执行: 恐怕您的代码正在按预期工作:t.events.SomeFunc根本不是零请检查此处:。或者我错了,问题
恐怕您的代码正在按预期工作:t.events.SomeFunc根本不是零请检查此处:。或者我错了,问题出在其他地方了?看起来工作正常,只要将Foo-func声明更改为返回int-func-Fooi-int{return I*I}@tomasz啊,你的测试让我意识到这与我在代码中调用它的方式有关看看循环:@Dess-first-loop正在复制Top并修改副本。直接访问元素@tomasz,就是它。感谢代码本身只是一个示例,没有经过语法测试。真正的原因是,在我自己的代码库中,我是这样使用它的:我仍然想知道如何在版本中使用for eachTo使更改保持不变,以便您可以将数组从[]顶部更改为[]*顶部。
type FuncPtr func(int) int
func Foo(i int) { return i * i }
type Events struct {
SomeFunc FuncPtr
}
type Top struct {
events Events
}
func (self *Top) initEvents() {
// This change works within this function, but
// doesn't stick around after this method returns.
self.events.SomeFunc = Foo
}
func main() {
var t := Top{}
t.initEvents()
t.events.SomeFunc == nil // True: Change in initEvents() doesn't stick
}
package main
import(
"fmt"
)
type FuncPtr func(int) int
func Foo(i int) int {
return i*i
}
type Events struct {
SomeFunc FuncPtr
}
type Top struct {
events Events
}
func (self *Top) initEvents() {
// This change works within this function, but
// doesn't stick around after this method returns.
self.events.SomeFunc = Foo
}
func main() {
var t = Top{}
t.initEvents()
if t.events.SomeFunc == nil {
fmt.Println("SomeFunc not set")
}
fmt.Println("6^2 =",t.events.SomeFunc(6))
}