在golang的同一结构中使用func引用另一个字段

我有一个看起来像这样的结构:


type Job struct {

    Action  func()

    Cron    string

}

那么对于这个结构体的一个实例,实现内部的代码是否有可能Action获得对 的引用Cron?谢谢。


ITMISS
浏览 192回答 2
2回答

子衿沉夜

使用闭包创建Action函数:func MakeAction(job *Job) func() {    return func() {        // function that uses the variable job    }}您可以MakeAction像这样使用该函数:j := &Job{ nil, "foo" }j.Action = MakeAction(j)请注意,当有人制作Job结构的副本时,这可能会以意想不到的方式表现- 创建的闭包内的引用MakeAction()仍将指向原始实例(而不是副本)。

慕标5832272

您似乎必须传递Job对该Action函数的引用才能使该函数访问Cron.package mainimport "fmt"type Job struct {    Action func(*Job)    Cron   string}func main() {    j := &Job{f, "test"}    fmt.Println("Hello, playground", j)    j.Action(j)}func f(j *Job) {    fmt.Println(j.Cron)}输出:Hello, playground &{0x201a0 test}test没有一个闭包示例允许您引用自己的结构。OP补充说:外部框架预计这样的功能:func()。我正在将此函数包装到我自制的 struct 中Job,并将其他内容放入该Job结构中。现在我希望Action可以访问 中的其他字段Job,但似乎不可能。后面我会Action直接传入外部框架。我确认,仅通过将func()(来自外部框架)包装在您的结构中并不意味着f可以通过闭包访问结构字段。您需要单独的初始化,如FUZxxl的回答所示。否则,该函数(来自外部框架)如何知道Job?只有当该函数需要一个带有函数的接口Cron(),而不是一个它一无所知的结构体和一个Cron字段时,这才有效。在这个例子中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go