【发布时间】:2014-10-12 22:52:33
【问题描述】:
鉴于以下示例,是否有可能创建一个函数,可以从字面上复制(不仅获取反射.Type)实际类型以进行进一步操作?我知道 go 是静态类型的,虽然我可以将任何结构传递给定义接口参数的函数非常酷,但我是否有机会做更多相反的事情?
我已经查看了 reflect 包,但只找到了返回 reflect.Type 或 reflect.Value 的东西。我使用了返回一个新的 reflect.Value 的 New() 方法——我无法设置任何字段。也许有使用反射包经验的人可以告诉我这是否绝对可行 - 或者是否有其他方法。
package main
import "fmt"
type User struct {
Name string
}
func main() {
user := User{Name:"FooBar"}
DoSomethingGenericWithStruct(user)
}
func DoSomethingGenericWithStruct(i interface{}) {
// access fields of i ...
// or create slice of type of i ([]User) ...
// or instantiate new object of type of i (new User) ...
// ...
}
【问题讨论】:
-
Golang 以缺乏参数类型和泛型函数着称。您可以查看github.com/ahmetalpbalkan/go-linq 甚至bouk.co/blog/idiomatic-generics-in-go 以获得灵感。
-
为什么这个问题被否决了?
标签: reflection go