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

mgo中出错:结果没有字段或方法,go,mgo,Go,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 { pani

我有以下代码

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)
我怎样才能打印出来


提前感谢。

result
是一个映射[string],因此您可以使用
result[“mw”]
访问该值。此映射条目的值将是类型
interface{}
,这是Go最常用的类型,因此您必须将其转换为float才能使用它。看


我从未使用过mgo,但它似乎在幕后使用了encoding/json。如果是这样,您可以定义一个encoding/json,它将能够将mgo的响应解组到其中

不幸的是,我从未使用过mgo,但看到错误消息,我可能会尝试

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

结果[“mw”]产生了以下错误:“./chemeo.go:78:无效操作:结果[“mw”](类型*映射[字符串]接口{})的索引)“这是因为结果不是映射,而是指向映射的指针,很抱歉我没有仔细阅读。您必须首先取消对它的引用:
(*result)[“mw”]
。为了方便起见,您还可以将取消引用的值分配给新变量:
result2:=*result
。不用担心。谢谢,它正在工作。为什么结果不会改变地图?或者result是否从保存查询的Find方法中获取地址?result[“mw”]生成以下错误:“./chemeo.go:78:无效操作:result[“mw”](类型为*map[string]interface{}的索引)”