猿问

用 Go 将 XML 解码成接口类型?

是否可以使用 Go 1.3 将 XML 解码为接口类型?


例如,如果结构看起来像这样(简化):


type Field interface { ... }


// DataField and ControlField satisfy Field interface

type DataField struct { ... } // <- One concrete type, with XML tags

type ControlField struct { ... } // <- Another concrete type, with XML tags



type Record struct {

    Fields []Field // <- Field is an interface

}


...

// we want to decode into a record, e.g.

var record Record

decoder.DecodeElement(&record, &se)

...

据我所知,可以使用具体类型解码 XML,例如:


type Record struct {

    ControlFields []ControlField // <- Using concrete type works

    DataFields []DataField // <- Using concrete type works

}

但是接口类型失败了,尽管使用正确的 XML 标记对实现进行了注释。


有关可运行的示例,请参阅http://play.golang.org/p/tPlw4Y74tt或作为gist。


倚天杖
浏览 203回答 2
2回答

米脂

从看代码的encoding/xml包,现在看来,接口类型是刚刚跳过:...switch v := val; v.Kind() {case reflect.Interface:&nbsp; &nbsp; // TODO: For now, simply ignore the field. In the near&nbsp; &nbsp; //&nbsp; &nbsp; &nbsp; &nbsp;future we may choose to unmarshal the start&nbsp; &nbsp; //&nbsp; &nbsp; &nbsp; &nbsp;element on it, if not nil.&nbsp; &nbsp; return p.Skip()...转到版本:1.3。
随时随地看视频慕课网APP

相关分类

Go
我要回答