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