Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何在方法中更改函数引用字段?_Go - Fatal编程技术网

Go 如何在方法中更改函数引用字段?

Go 如何在方法中更改函数引用字段?,go,Go,如何使initEvents方法内部的更改保持不变?也就是说,我想在initEvents方法中更改函数reference Top::Events::SomeFunc的值,并在initEvents方法返回后保持该更改。您的代码进行了一些小的修改,以使其可编译 顶部没有包裹声明 您没有为函数Foo指定整数返回类型 为了方便起见,我在下面提供了一个完整的代码示例,如果您想自己运行,可以在以下位置执行: 恐怕您的代码正在按预期工作:t.events.SomeFunc根本不是零请检查此处:。或者我错了,问题

如何使initEvents方法内部的更改保持不变?也就是说,我想在initEvents方法中更改函数reference Top::Events::SomeFunc的值,并在initEvents方法返回后保持该更改。

您的代码进行了一些小的修改,以使其可编译

顶部没有包裹声明 您没有为函数Foo指定整数返回类型 为了方便起见,我在下面提供了一个完整的代码示例,如果您想自己运行,可以在以下位置执行:


恐怕您的代码正在按预期工作: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))
}