mgo 中的错误:结果没有字段或方法

我有以下代码


package main


import (

    "encoding/json"

    "fmt"

    "labix.org/v2/mgo"

    "labix.org/v2/mgo/bson"

)


func insertEntry(j *map[string]interface{}, entry string) {

    err := json.Unmarshal([]byte(entry), j)

    if err != nil {

        panic(err)

    }


}


func main() {

    c1 := `{

    "mw" : 42.0922,

        "ΔfH°gas" : {

          "value" : 372.38,

          "units" : "kJ/mol"

        },

        "S°gas" : {

          "value" : 216.81,

          "units" : "J/mol×K"

        },

        "index" : [

          {"name" : "mw", "value" : 42.0922},

          {"name" : "ΔfH°gas", "value" : 372.38},

          {"name" : "S°gas", "value" : 216.81}

        ]

        }`


    c2 := `{

    "name": "silicon",

    "mw": 32.1173,

    "index": [

    {

        "name": "mw",

        "value": 32.1173

    }

    ]

    }`


    var m map[string]interface{}


    insertEntry(&m, c1)

    insertEntry(&m, c2)

    chemical := m["ΔfH°gas"].(map[string]interface{})

    fmt.Println("value: ", chemical["value"].(float64))

    fmt.Println("units: ", chemical["units"].(string))


    session, err := mgo.Dial("localhost")


    if err != nil {

        panic(err)

    }

    defer session.Close()


    // Optional. Switch the session to a monotonic behavior.

    session.SetMode(mgo.Monotonic, true)


    c := session.DB("test").C("chemicals")

    err = c.Insert(&m)

    if err != nil {

        panic(err)

    }


    result := &m

    err = c.Find(bson.M{"name": "silicon"}).One(&result)

    if err != nil {

        panic(err)

    }


    fmt.Println(result)

    fmt.Println("mw:", result.mw)

}

并得到以下错误


$ go run chemeo.go

# command-line-arguments

./chemeo.go:78: result.mw undefined (type *map[string]interface {} has no field or method mw)

我怎么能打印出 mw?


喵喵时光机
浏览 222回答 2
2回答

POPMUISE

不幸的是,我从未使用过 mgo,但查看错误消息,我可能会尝试fmt.Println("mw:", result["mw"])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go