我正在尝试使用GORP从mySQL数据库中执行SELECT。
我收到一条错误消息,它指示“reflect.Value.Interface:无法返回从未导出的字段或方法获得的值”。
我已经验证了数据库连接。例如,选择(*)count给出正确的计数。我看到它失败了



没有以上行程序不会引发任何错误。

这是我的代码。

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)
}
}

最佳答案

这是开始使用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(我认为这在Go中更惯用了)。

请注意,Go的大写导出功能适用于常量,包变量,类型和函数名称以及结构中的字段。

09-06 23:43