为了账号安全,请及时绑定邮箱和手机立即绑定

Go 和 MongoDb 错误:没有字段或方法

Go 和 MongoDb 错误:没有字段或方法

Go
梦里花落0921 2021-12-07 16:18:22
我是 Golang 的新手。在尝试password从 MongoDb 查询结果中提取时,出现以下错误:“./1.go:73: results.password 未定义(类型 []Person 没有字段或方法密码)”该错误是由代码中的倒数第二行引起的。我们如何分离查询结果?代码:package mainimport ("fmt""html/template""log""net/http""reflect""gopkg.in/mgo.v2/bson""gopkg.in/mgo.v2")type login struct {UserName stringPassword  string}type Person struct {ID        bson.ObjectId `bson:"_id,omitempty"`FirstName      string   LastName     string Email       stringPassword    string}func main() {// DB Connectionsession, err := mgo.Dial(":27017")if err != nil {    panic(err)}defer session.Close()c := session.DB("reg").C("people")session.SetMode(mgo.Monotonic, true)// parse templatetpl, err := template.ParseFiles("Login.html")if err != nil {    log.Fatalln(err)}http.HandleFunc("/", func(res http.ResponseWriter, req *http.Request)    {    // receive form submission    uname := req.FormValue("username")    pwd := req.FormValue("password")    fmt.Println("fName: ", uname)    fmt.Println("[]byte(uname): ", []byte(uname))    fmt.Println("typeOf: ", reflect.TypeOf(uname))            fmt.Println("pwd : ", pwd)    fmt.Println("[]byte(pwd ): ", []byte(pwd))    fmt.Println("typeOf: ", reflect.TypeOf(pwd))    // execute template    err = tpl.Execute(res, login{uname,pwd})    if err != nil {        http.Error(res, err.Error(), 500)        log.Fatalln(err)    }    //DB access    var results []Person    err = c.Find(bson.M{"firstname": uname}).Sort("-id").All(&results)    if err != nil {        panic(err)    }    fmt.Println("Results All: ", results)    //Next Line Causes Error....    fmt.Println("New Password ", results.password)})http.ListenAndServe(":9000", nil)}
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

您的results变量是Persons 的一部分:


var results []Person

Password是 的一个字段Person。所以这一行:


fmt.Println("New Password ", results.password)

是编译时错误,因为password它不是类型的字段(或方法)[]Person(还要注意与password不同Password)。


您可以像这样引用切片的第一个元素:


if len(results) > 0 {

    fmt.Println("New Password:", results[0].Password)

} else {

    fmt.Println("No peope")

}


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信