gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:28:53 25 4
gpt4 key购买 nike

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
}

如何使 initEvents() 方法中的更改持续存在?也就是说,我想在 initEvents() 方法中更改函数引用 Top::Events::SomeFunc 的值,并且一旦 >initEvents() 方法返回。

最佳答案

您的代码经过一些小的更正以使其可编译。

  1. 顶部没有包声明
  2. 您没有为函数 Foo 指定整数返回类型

为方便起见,我在下面提供了完整的代码示例,如果您想自己运行它,可以在以下位置进行:https://play.golang.org/p/Ngu8FFiGrI

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))
}

关于go - 如何在方法中更改函数引用字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27299029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com