2014-11-23 30 views
1

我正在尝试使用GORP从mySQL数据库执行SELECT。 我收到一个错误,说“reflect.Value.Interface:无法返回从未导出的字段或方法获得的值”。 我已验证数据库连接。例如,选择(*)计数提供正确的计数。我看到它失败在golang与选择的Gorp错误

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:[email protected]/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) 
} 
} 

This is how table looks in mySQL

回答

3

这是开始进入人们共同的陷阱。

所有在结构中的字段是出口隐藏仅仅基于首字母:如果是大写,现场出口。否则,它不是。

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的大写导出功能适用于常量,程序包变量,类型和函数名称以及结构中的字段。

+0

谢谢瑞克。我花了整整两天的时间尝试各种组合,但都没有奏效。我应该早些时候发布。 – krisho 2014-11-24 15:20:18