![](/img/trans.png)
[英]Queries related to extending <complexType> from one XSD to another
[英]non exported fields when extending a struct from another package
我在一個小型玩具項目中使用go-simplejson (實際上是我的第一個go項目)。 在這個項目中,我需要擴展simplejson包:
simplejson通過構造函數引入了一個小的結構(帶有一些有用的方法):
type Json struct {
data interface{}
}
// NewJson returns a pointer to a new `Json` object
// after unmarshaling `body` bytes
func NewJson(body []byte) (*Json, error) {
j := new(Json)
err := j.UnmarshalJSON(body)
if err != nil {
return nil, err
}
return j, nil
}
在我的項目中,我想將一些xml數據同步到CouchDB。 為此,我希望創建一個新的構造函數,在該構造函數中,將解碼后的xml(類型interface {})直接傳遞到Json對象,然后將其編組為JSON。
這很簡單:
func NewJsonFromData(data interface{}) *Json {
return &Json{data}
}
現在,由於這是某種“ hack”,我想避免分叉go-simplejson並在go-simplejson中實現它,因為我會“污染”一般的包裝。 我想用自己的小玩具包來做。 這是麻煩開始的地方:
數據字段未導出並且在包外部不可見...因此將此函數聲明放入我的其他包中,如下所示:
func NewJsonFromData(data interface{}) *simplejson.Json {
return &simplejson.Json{data}
}
不起作用,它給出以下編譯錯誤:
implicit assignment of unexported field 'data' in simplejson.Json literal
也做
type Json struct {
simplejson.Json
}
在我自己的包中不起作用,我無法在組成simplejson.Json的我自己的Json結構的構造函數中設置數據字段,因為未導出(顯然,如果將該字段稱為“ Data”,它將起作用。
在我自己的包文件夾中制作一個文件
package simplejson
不接受,因為go會強制您將軟件包的所有文件保存在一個文件夾中。
如果開發人員決定不導出結構字段,那么擴展包功能根本不可能是正確的嗎? (另一方面,我想這樣做的原因是,我想這樣做,因為它“僅”是一個玩具示例:))
如果可能的話,最好的方法是什么?
在所有語言中都是如此,私有字段在其范圍之外不可訪問。
話雖這么說,如果您已經有了接口,為什么不使用標准的JSON庫,該庫具有編組函數,該函數直接使用接口即可,而不必設置為字段。
package main
import (
"encoding/json"
)
func main() {
v := ....
jsonBytes, err := json.Marshal(v)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.