我有 160 多个 .xsd 模式,对于每个文件,我使用 xsdgen 生成了 xsd.go 文件,但每个文档都有 CommonType 的公共标头。
namespace some_document
type Document struct {
Header CommonType `xml:"header"`
// Other fields
}
type CommonType struct {
A A `xml:"a"`
B B `xml:"b"`
C1 C `xml:"c1"`
C2 C `xml:"c2"`
D D `xml:"d"`
}
type A string
type B string
type C string
type D string
namespace any_document
type Document struct {
Header CommonType `xml:"header"`
// Other fields
}
type CommonType struct {
A A `xml:"a"`
B B `xml:"b"`
C1 C `xml:"c1"`
C2 C `xml:"c2"`
D D `xml:"d"`
}
type A string
type B string
type C string
type D string
此外,对于每个模式,我创建一个用于构建它的函数。我想创建一个函数 BuildHeader 并在构建器的函数中重用它。有没有办法用这种类型创建公共命名空间并使用它来代替any_document.CommonType和some_document.CommonType?我不想编辑代码生成的文件。
namespace common
type CommonType struct {
A A `xml:"a"`
B B `xml:"b"`
C1 C `xml:"c1"`
C2 C `xml:"c2"`
D D `xml:"d"`
}
type A string
type B string
type C string
type D string
我的想法:
如果您正在处理生成的结构,则没有简单的方法可以做到这一点。但是,您可以编写一个函数来初始化公共标头并将其用于所有生成的类型,前提是它们在结构上相同。
package initializer
type CommonType struct {
// Identical fields of the common type in all the packages
...
}
func NewCommonType() CommonType {
// initialize an instance of CommonType
return commonType
}
然后你可以使用:
var doc1 pkg1.Document
var doc2 pkg2.Document
...
doc1.CommonType = pkg1.CommonType(initializers.NewCommonType())
doc2.CommonType = pkg2.CommonType(initializers.NewCommonType())