http://play.golang.org/p/JJnU5ag234我只能让 vA 直接工作,如果我想根据我期望的 json 使用我的 vI 在其中存储 A 或 B,我得到json:无法将对象解组为 main.TA 类型的 Go 值package mainimport ( "encoding/json" "fmt" "strings")type T interface { Printer()}type A struct{ JA string }func (t A) Printer() { fmt.Print("A") }type B struct{ JB string }func (t B) Printer() { fmt.Print("B") }var vA []Avar vB []Bvar vI []Tfunc main() { // vA = []A{A{}} // vI = []T{B{}} vI = []T{A{}} get()}func get() { dec := json.NewDecoder(strings.NewReader("[{\"JA\":\"OK\"}]")) if err := dec.Decode(&vI); err != nil { fmt.Print(err) } for _, v := range vI { v.Printer() }}
1 回答
波斯汪
TA贡献1811条经验 获得超4个赞
由于您希望解码器填充结构的字段,因此您必须使用指针。像这样在类型的指针上定义接口的方法:http : //play.golang.org/p/WUMt9Ok9Xp
package main
import (
"encoding/json"
"fmt"
"strings"
)
type T interface {
Printer()
}
type A struct {
JA string
}
func (a *A) Printer() {
fmt.Printf("A: %v\n", a.JA)
}
type B struct {
JB string
}
func (b *B) Printer() {
fmt.Printf("B: %v\n", b.JB)
}
func main() {
vI := []T{&A{}, &B{}}
dec := json.NewDecoder(strings.NewReader("[{\"JA\":\"OKA\"}, {\"JB\":\"OKB\"}]"))
if err := dec.Decode(&vI); err != nil {
fmt.Print(err)
}
for _, v := range vI {
v.Printer()
}
}
- 1 回答
- 0 关注
- 148 浏览
添加回答
举报
0/150
提交
取消