Go 语言访问 {interface{} | []interface{}] 的索引?
Go lang accessing {interface{} | []interface{}] 's index?
我在接口方面有点问题,我无法分享导致此问题的任何代码,这是多行代码的结果。所以这就是问题所在,我需要访问此 []interface{} 元素,但它给我一个错误,如 (interface{}) does not support indexing 任何帮助都会很棒。我现在卡住了。
您需要一个类型开关来确定接口的底层类型是什么。
参见:https://go.dev/tour/methods/16
示例:(https://go.dev/play/p/gSRuHBoQYah):
package main
import (
"encoding/json"
"fmt"
"log"
)
func printInterface(o interface{}) {
switch v := o.(type) {
case map[string]interface{}:
fmt.Printf("this is a map. a: %+v\n", v["a"])
case []interface{}:
fmt.Printf("this is a slice, len: %d, v[0] is: %+v, type: %T\n", len(v), v[0], v[0])
default:
fmt.Printf("this is %T\n", v)
}
}
func main() {
var result1 interface{}
listOfObjects := `[{"a":1}, {"a":2}]`
if err := json.Unmarshal([]byte(listOfObjects), &result1); err != nil {
log.Fatal(err)
}
printInterface(result1)
var result2 interface{}
singleObject := `{"a":1, "b":2}`
if err := json.Unmarshal([]byte(singleObject), &result2); err != nil {
log.Fatal(err)
}
printInterface(result2)
}
我在接口方面有点问题,我无法分享导致此问题的任何代码,这是多行代码的结果。所以这就是问题所在,我需要访问此 []interface{} 元素,但它给我一个错误,如 (interface{}) does not support indexing 任何帮助都会很棒。我现在卡住了。
您需要一个类型开关来确定接口的底层类型是什么。 参见:https://go.dev/tour/methods/16
示例:(https://go.dev/play/p/gSRuHBoQYah):
package main
import (
"encoding/json"
"fmt"
"log"
)
func printInterface(o interface{}) {
switch v := o.(type) {
case map[string]interface{}:
fmt.Printf("this is a map. a: %+v\n", v["a"])
case []interface{}:
fmt.Printf("this is a slice, len: %d, v[0] is: %+v, type: %T\n", len(v), v[0], v[0])
default:
fmt.Printf("this is %T\n", v)
}
}
func main() {
var result1 interface{}
listOfObjects := `[{"a":1}, {"a":2}]`
if err := json.Unmarshal([]byte(listOfObjects), &result1); err != nil {
log.Fatal(err)
}
printInterface(result1)
var result2 interface{}
singleObject := `{"a":1, "b":2}`
if err := json.Unmarshal([]byte(singleObject), &result2); err != nil {
log.Fatal(err)
}
printInterface(result2)
}