我收到一个基本上是切片的接口。现在我想将它转换为指向切片的指针。问题是,我有切片本身或指向接口的指针。 我可以轻松地显示在一个代码示例:将接口{}转换为golang中的* [] int
func main(){
model := []int{1,2,3,4,5,6,7,8,10,11,133123123123}
method(model)
}
func method(model interface{}){
fmt.Println(reflect.TypeOf(model)) // this is of type []int
fmt.Println(reflect.TypeOf(&model)) // this is of type *interface{}
}
我需要的是这种类型:
fmt.Println(reflect.TypeOf(result)) // this should be type *[]int
我只知道在运行时的类型,所以我不能只是采取 &(model.([]int))
有没有使用golang反射来接收这个的方法? 'int'类型实际上并不重要,重要的是,它是一个指向片段的指针。 *[]interface{}
也可以。
编辑︰
为了使问题更清楚,我应该补充说:我对切片的数据不感兴趣,但只有在获取指向同一类型切片(它可以基本上是空的) 。所以James Henstridge完美地回答了作品。
http://golang.org/pkg/reflect/#Value.Addr有什么问题?我承认我不明白你真正想做什么。这真的取决于。并非Go **中的所有值都是**可寻址的,因此可能无法做到。你想用* [] int做什么? – Volker 2014-11-03 21:21:34
事实上,这个值是不可寻址的。 基本上我想创建一个预定义类型的片(使用reflect.MakeSlice)并将它传递给mgo的一个方法(mgo的Query的All()方法)。这个方法需要一个Ptr到Slice。我通过在已知类型的外部创建切片来找到解决方案。但我试图找到一种通用的方式来做到这一点。 我理解你是否正确,因为它不是一个可解决的价值,这是不可能的? – Chrisport 2014-11-03 21:36:56
*所有内容都以价值传递。将值复制到'method'调用后,您无法获得指向'model'的指针。无论它是否是'interface {}'都没关系,你有切片值,而不是指针。 – JimB 2014-11-03 22:54:45