1

GORP を使用して mySQL データベースから SELECT を実行しようとしています。「reflect.Value.Interface: エクスポートされていないフィールドまたはメソッドから取得した値を返すことはできません」というエラーが表示されます。 DB接続を確認しました。たとえば、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)
}
}

これは、テーブルが mySQL でどのように見えるかです

4

1 に答える 1

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(これは Go ではより慣用的だと思います)。

Go の大文字エクスポート機能は、定数、パッケージ変数、型、関数名、および構造体内のフィールドに適用されることに注意してください。

于 2014-11-24T11:27:11.560 に答える