(注、この問題にはDgraphは必要ありません。問題が発生している場所で使用しているツールです)
いくつかの構造体があるとしましょう
type AccountSettings struct {
Uid string `json:"uid"`
DType string `json:"dgraph.type"`
Name string `json:"name"`
Username string `json:"username"`
}
type Settings struct {
Uid string `json:"uid"`
DType string `json:"dgraph.type"`
Account AccountSettings `json:"account"`
}
type Tag struct {
Uid string `json:"uid"`
DType string `json:"dgraph.type"`
Label Label `json:"label"`
}
type User struct {
Uid string `json:"uid"`
DType string `json:"dgraph.type"`
Settings Settings `json:"settings"`
Tags []Tag `json:"tags"`
}
ユーザーを作成してDgraphデータベースに追加します
user = User{
DType: "User",
Settings: Settings{
DType: "Settings",
Account: SettingsAccount{
DType: "SettingsAccount",
Name: "Billy Bob"
Username: "billyboy123"
},
Tags: []Tag{{
DType: "Tag",
Label: "admin"
}, {
DType: "Tag",
Label: "user"
}}
},
}
次に、Dgraphデータベースに次のようにクエリを実行します(ユーザーノードのuidがあると仮定します)
{
user(func: uid("0x1234")) {
uid
settings {
account {
name
username
}
}
tags {
label
}
}
}
応答は次のように返されます
{
"data": {
"user": [
{
"uid": "0x1234"
"settings": [
{
"account": [
{
"name": "Billy Bob",
"username": "billyboy123"
}
]
}
]
"tags": [
{
label: "admin"
},
{
label: "user"
},
]
}
]
}
}
したがって、問題は、Dgraph の JSON 応答が構造体型のフィールドを配列として返すことです (おそらく、単一の他のノードを指す複数のノードが存在する可能性があるため)。ただし、配列であるため、すぐにマーシャリングすることはできませんUser
構造体 (はではなくUser.Settings
型であるため)。Settings
[]Settings
User
構造体 (またはその他の種類の構造体) を使用して Dgraph JSON 応答をマーシャリングするにはどうしますか?
settings
JSON 応答の配列は、その配列の最初の要素であるtags
必要がありますが、構造体で指定されているため、配列は配列のままである必要があることに注意することが重要User
です。