2014-11-23 29 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