我正在尝试使用GORP从mySQL数据库中进行SELECT。 我收到的错误是“reflect.Value.Interface:无法返回从未导出的字段或方法中获取的值”。 我已经验证了数据库连接。例如,Select(*)count给出正确的计数。
我看到它失败了dbmap.Select(& dd,“SELECT * FROM kd_dropdowns”)
如果没有上述行程序,则不会抛出任何错误。
这是我的代码。
package main
import (
"database/sql"
"fmt"
"log"
"net/http"
"github.com/coopernurse/gorp"
_ "github.com/go-sql-driver/mysql"
"github.com/gorilla/mux"
)
func main() {
fmt.Println("reached main")
// Create a MUX
r := mux.NewRouter()
//manegala patti
r.HandleFunc("/manegalu", manegalaTorisu).Methods("GET")
http.ListenAndServe(":8080", r)
}
func manegalaTorisu(w http.ResponseWriter, r *http.Request) {
type Dropdowns struct {
dd_id int64 `db:"dd_id"`
identifier int64 `db:"identifier"`
name string `db:"name"`
active string `db:"active"`
}
db, err := sql.Open("mysql", "krishna:xxxx@/kd")
defer db.Close()
var dbmap *gorp.DbMap
// construct a gorp DbMap
dbmap = &gorp.DbMap{Db: db, Dialect: gorp.MySQLDialect{}}
var dd []Dropdowns
_, err = dbmap.Select(&dd, "SELECT * FROM kd_dropdowns")
checkErr(err, "Select failed")
fmt.Fprint(w, "Success")
}
func checkErr(err error, msg string) {
if err != nil {
log.Fatalln(msg, err)
}
}
答案 0 :(得分:3)
对于以Go开头的人来说,这是一个常见的陷阱。
结构中的所有字段都是导出或隐藏,只需基于第一个字母:如果它是大写,则导出字段。否则,它不是。
Gorp正在尝试访问结构中的导出字段。但是你使用了小写的第一个字母,所以字段是隐藏的,所以它失败了。
试试这个。
...
type Dropdowns struct {
DdId int64 `db:"dd_id"`
Identifier int64 `db:"identifier"`
Name string `db:"name"`
Active string `db:"active"`
}
...
如果您愿意,可以将dd_id
DdId
评为{{1}}(我认为这在Go中更为惯用)。
请注意,Go的大写导出功能适用于常量,包变量,类型和函数名称,以及结构中的字段。