作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
是否可以使用匿名函数更新结构中的值?在 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")
最佳答案
Go 是静态类型,而 python 是动态类型。这意味着在 Go 中,您必须为每个变量声明(或让编译器推断)一个类型,并且它必须始终保持该类型。因此,您不能将 Inspect
属性(类型为 string
)分配为 lambda 函数。
根据您的问题,您并不完全清楚您希望它如何工作。不过,这是您可以执行的操作的示例:
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
声明为指向 Info
的指针,然后返回它的值。使用其中之一。
Here它在 Playground 上。
关于go - 结构上的匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45866477/
我是一名优秀的程序员,十分优秀!