У меня есть следующий кодошибка в МдО: результат не имеет поля или метод
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 вне дома?
Заранее спасибо.
результат [ «МВТ»] производится следующее сообщение об ошибке:»./chemeo.go:78: недопустимой операции: result ["mw"] (индекс типа * map [string] interface {}) " – user977828
Это потому, что результат - это не карта, а указатель на карту, извините, что я не читал достаточно близко. Сначала вы должны разыменовать его: '(* result) [" mw "]'. Вы также можете назначить разыменованное значение новой переменной для удобства: 'result2: = * result'. –
Не беспокойтесь. Спасибо, что он работает. Как получается, что результат не меняет карту? Или результат получает адрес из метода «Найти», где сохраняется запрос запроса? – user977828