我收到一個基本上是切片的接口。現在我想將它轉換爲指向切片的指針。問題是,我有切片本身或指向接口的指針。 我可以輕鬆地顯示在一個代碼示例:將接口{}轉換爲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