考慮以下代碼:package mainimport ( "fmt" "reflect")func f(v interface{}) { fmt.Println(reflect.TypeOf(v).Elem()) fmt.Println(reflect.ValueOf(v))}func main() { var aux []interface{} aux = make([]interface{}, 2) aux[0] = "foo" aux[1] = "bar" f(aux)}輸出是:interface {}[foo bar]如何確定 interface{} 切片中包含的元素的類型,在這個特定示例中,我需要在我的函數中知道f該 interface{} 切片包含string值。我的用例是,使用反射,我試圖根據我的 interface{} 參數切片所持有的值的類型來設置一個結構字段。
1 回答

素胚勾勒不出你
TA貢獻1827條經驗 獲得超9個贊
你傳入的值是 type []interface{},所以元素類型是interface{}. 如果您想查看元素類型是什么,則需要單獨思考:
func f(i interface{}) {
v := reflect.ValueOf(i)
for i := 0; i < v.Len(); i++ {
e := v.Index(i)
fmt.Println(e.Elem().Type())
fmt.Println(e)
}
}
如果您知道您將始終擁有一個[]interface{},請將其用作參數類型以使迭代和類型檢查更容易:
func f(things []interface{}) {
for _, thing := range things {
v := reflect.ValueOf(thing)
fmt.Println(v.Type())
fmt.Println(v)
}
}
- 1 回答
- 0 關注
- 143 瀏覽
添加回答
舉報
0/150
提交
取消