私はこのライブラリを使用してCouchDB(具体的にはcloudant)「github.com/mikebell-org/go-couchdb」にアクセスしていますが、問題があることに気付きました。
ファイルをデータベースに追加して構造体を渡すと、大文字で始まる構造体のフィールドのみが追加されます。
例えば
type Person struct {
name string
Age int
}
func main() {
db, _ := couchdb.Database(Host, database, username, password)
joe := Person{
name: "mike",
Age: 190,
}
m, _ := db.PostDocument(joe)
}
この場合、「年齢」フィールドのみが更新され、データベースに挿入されました。
別のケースでもこの問題に気づきました-このようなことをしているとき:
type Sample struct {
Name string
age int
}
joe := Sample{
Name: "xx",
age: 23,
}
byt, _ := json.Marshal(joe)
post_data := strings.NewReader(string(byt))
fmt.Println(post_data)
この場合、名前のみが出力されます。
output : &{{"Name":"xx"} 0 -1}
どうしてこれなの?小文字のフィールドがあり、データベース内にありたい場合、それは可能ですか?
これは、大文字で始まるフィールドのみがエクスポートされるため、つまり現在のパッケージの外側(この場合はjson
パッケージ内)に表示されるためです。
これを参照する仕様の一部を次に示します。 http://golang.org/ref/spec#Exported_identifiers
それでも、「タグ」と呼ばれるものを使用して、大文字で始まらないjsonフィールドを非整列化できます。 json
パッケージの場合、これは使用する構文です。
type Sample struct {
Name string `json:"name"`
Age int `json:"age"`
}
詳細は documentation を参照してください。
jsonパッケージでは、stringfiyフィールドのみが大文字で始まります。 http://golang.org/pkg/encoding/json/ を参照
次のように構造体を定義する必要があります:
type Sample struct{
Name string `json:"name"`
Age int `json:"age"`
}