vit*_*ter 4 json pointers interface go unmarshalling
interface{}json.Unmarshal
因为一段代码值一千字,所以举个例子:
package main
import (
"encoding/json"
"fmt"
)
func test(i interface{}) {
j := []byte(`{ "foo": "bar" }`)
fmt.Printf("%T\n", i)
fmt.Printf("%T\n", &i)
json.Unmarshal(j, &i)
fmt.Printf("%T\n", i)
}
type Test struct {
Foo string
}
func main() {
test(Test{})
}
哪些输出:
main.Test
*interface {}
map[string]interface {}
json.Unmarshalmap[string]interface{}
interface{}*interface{}json.Unmarshalmap[string]interface{}
Unmarshal
要将 JSON 解组为接口值,Unmarshal 将其中之一存储在接口值中:[...]
如果我像这样传递一个指向测试函数的指针,它会起作用:
func test(i interface{}) {
j := []byte(`{ "foo": "bar" }`)
fmt.Printf("%T\n", i)
fmt.Printf("%T\n", &i)
json.Unmarshal(j, i)
fmt.Printf("%T\n", i)
fmt.Println(i)
}
func main() {
test(&Test{})
}
哪些输出:
*main.Test
*interface {}
*main.Test
&{bar}
&Unmarshal*Testi
&iUnmarshali
如果我运行:
func test(i interface{}) {
j := []byte(`{ "foo": "bar" }`)
fmt.Printf("%T\n", i)
fmt.Printf("%T\n", &i)
json.Unmarshal(j, &i)
fmt.Printf("%T\n", i)
fmt.Println(i)
}
func main() {
test(&Test{})
}
那么它仍然有效:
*main.Test
*interface {}
*main.Test
&{bar}
现在我没有谷歌搜索查询了。