结构上的匿名函数

Is it possible to update a value on in a struct using an anonymous function? In python I would do the following with a lambda:

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

Which would place the dynamic id value in the string.

In Go I am trying something like his:

type Info struct {
    Inspect string
}

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

But I want to update the value like this:

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

Go is statically typed, where python is dynamically typed. This means that in Go, you must declare (or let the compiler infer) a type for each variable, and it must always stay that type. Therefore, you cannot assign your Inspect property (typed as a string) as a lambda function.

Based on your question, it's not entirely clear how exactly you want this to work. Here is an example of what you could do, though:

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
}

You can then use it like so:

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

There is also no need to declare i as a pointer to Info and then return the value of it. Use one or the other.

Here it is on the playground.

You can certainly define an anonymous function as a property of a struct, but the type has to be the full function signature, rather than just the return value of the function.

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

Feel free to play around with that here: https://play.golang.org/p/IRylodv2cZ