struct上的匿名函数

时间:2017-08-24 16:12:15

标签: go

是否可以使用匿名函数更新结构中的值?在python中,我将使用lambda执行以下操作:

inspect = lambda id: '/api/{}/inspect'.format(id)

将动态id值放在字符串中。

Go我正在尝试类似他的事情:

type Info struct {
    Inspect string
}

func Assign() Info  {
    i := &Info{}
    i.Inspect = return func(id) {return fmt.Sprintf("/api/%s/inspect", id)}
    return *i
}

但我想更新这样的值:

temp := Assign()
tempID := temp.Inspect("test")
fmt.Println("/api/test/inspect")

2 个答案:

答案 0 :(得分:5)

Go是静态类型的,其中python是动态类型的。这意味着在Go中,您必须声明(或让编译器推断)每个变量的类型,并且它必须始终保持该类型。因此,您无法将var mylabel = $("label[for='input[name=LargestMeeting]:checked']").text(); alert(mylabel) 属性(键入为Inspect)指定为lambda函数。

根据您的问题,目前还不完全清楚您希望它如何运作。以下是您可以做的一个例子:

string

然后您可以这样使用它:

type Info struct {
    Inspect func(string) string
}

func Assign() Info  {
    i := Info{
        Inspect: func(id string) string { return fmt.Sprintf("/api/%s/inspect", id) },
    }
    return i
}

也没有必要将temp := Assign() tempID := temp.Inspect("test") fmt.Println(tempID) 声明为i的指针,然后返回它的值。使用其中一种。

Here它在操场上。

答案 1 :(得分:1)

您当然可以将匿名函数定义为结构的属性,但类型必须是完整的函数签名,而不仅仅是函数的返回值。

type Info struct {
    Inspect func(string) string
}

func Assign() Info  {
    i := &Info{}
    i.Inspect = func(id string) string {
        return fmt.Sprintf("/api/%s/inspect", id)
    }
    return *i
}


func main() {
    temp := Assign()
    tempID := temp.Inspect("test")
    fmt.Println(tempID)
}

随意在这里玩:https://play.golang.org/p/IRylodv2cZ