我在golang与mongodb结合使用。 我使用以下包:
" gopkg.in/mgo.v2"
" gopkg.in/mgo.v2/bson"
我尝试处理嵌套结构并将其放入mongodb。 以下代码正确完成了工作,但我不知道这是否正确......
// init
type DummyStruct struct {
User string `bson:"user"`
Foo FooType `bson:"foo"`
}
type FooType struct {
BarA int `bson:"bar_a"`
BarB int `bson:"bar_b"`
}
// main
foobar := DummyStruct{
User: "Foobar",
Foo: FooType{
BarA: 123,
BarB: 456,
},
}
// Insert
if err := c.Insert(foobar); err != nil {
panic(err)
}
是否需要在两部分中构建嵌套结构?
如果我使用json-> golang结构转换器(https://mholt.github.io/json-to-go/)
我将获得以下结构
type DummyStructA struct {
User string `bson:"user"`
Foo struct {
BarA int `bson:"bar_a"`
BarB int `bson:"bar_b"`
} `bson:"foo"`
}
现在我不知道如何填写这个结构。
我试过了:
foobar := DummyStructA{
User: "Foobar",
Foo: {
BarA: 123,
BarB: 456,
},
}
但出现此错误:复合文字中缺少类型
我也试过这个
foobar := DummyStructA{
User: "Foobar",
Foo{
BarA: 123,
BarB: 456,
},
}
并得到了这两个错误:
字段:值和值初始值设定项的混合
undefined:Foo
或者是否需要使用bson.M处理结构(DummyStructA)
回复的问题:)
答案 0 :(得分:1)
你可以这样做
package main
import (
"fmt"
"encoding/json"
)
type DummyStruct struct {
User string `bson:"user" json:"user"`
Foo FooType `bson:"foo" json:"foo"`
}
type FooType struct {
BarA int `bson:"barA" json:"barA"`
BarB int `bson:"bar_b" json:"bar_b"`
}
func main() {
test:=DummyStruct{}
test.User="test"
test.Foo.BarA=123
test.Foo.BarB=321
b,err:=json.Marshal(test)
if err!=nil{
fmt.Println("error marshaling test struct",err)
return
}
fmt.Println("test data\n",string(b))
}
OutPut就像这样
test data
{"user":"test","foo":{"barA":123,"bar_b":321}}
答案 1 :(得分:0)
如果您在问题中定义了2个不同的结构。您需要声明foobar
之类的:
foobar := DummyStructA{
User: "Foobar",
Foo: FooType{
BarA: 123,
BarB: 456,
},
}
但是没有必要定义第二种类型来处理这种情况。您可以使用匿名struct
:
type DummyStructA {
User string `bson:"user"`
Foo struct{
Name string `bson:"name"`
Age int `bson:"age"`
} `bson: "foo"`
}
但是在尝试填充数据时会变得很麻烦。
foobar := DummyStructA{
User: "hello",
Foo : struct{
Name string
Age int
}{
Name: "John",
Age: 50,
}
}