嗨,我正在使用gorp和mysql。
当插入struct gorp返回时
Reflection.Value.Interface:无法返回从未导出的字段或方法获得的值
在gorp中,文档说Panics if any interface in the list has not been registered with AddTable
,但我添加了此结构
这个问题是BUS结构有方法吗?我的程序和我的 panic 帮助了我
type BUS struct {
Id int64 `db:"Idx"`
Created int64
Writer string `db:"Writer"`
WriterId int64
Title string `db:"Title"`
Content string `db:"Content"`
Want int64
status int64
}
func (b BUS) search(bf Board_find) []BUS {
var arr []BUS
query, query_map := bf.Prepare()
_, err := dbmap.Select(&arr, query, query_map)
if err != nil {
log.Print(err)
}
return arr
}
func (b* BUS) write() {
log.Print(reflect.TypeOf(b)) //just test code
err := dbmap.Insert(b)
check_err(err, "error in bus write")
}
func make_dbmap() *gorp.DbMap {
db, err := sql.Open("mysql", "tester:tester@tcp(127.0.0.1:3306)/TEST")
check_err(err, "db connection error")
log.Println("db connection Ok")
dialect := gorp.MySQLDialect{"InnoDB", "UTF8"}
dbmap := &gorp.DbMap{Db: db, Dialect: dialect}
AddTable(dbmap, USER_DB{}, "USER")
table := AddTable(dbmap, BUS{}, "BUSBOARD")
table.ColMap("Writer").SetMaxSize(10)
table.ColMap("Title").SetMaxSize(25)
table.ColMap("Content").SetMaxSize(50)
log.Println("Add Table in gorp Ok")
return dbmap
}
最佳答案
这个错误; reflect.Value.Interface: cannot return value obtained from unexported field or method
最有可能是由于未导出status int64
(至少我看不到其他可能导致它的未导出字段)。修复方法很简单,如大写字母Status
。
在Go中,将导出具有大写名称的结构上的字段,而不会导出具有小写名称的结构上的字段。未导出字段是语言与“私有(private)”字段最接近的内容。在这种情况下,gorp或引发错误的任何内容都已反射(reflect)出您的类型,找到了状态字段并尝试返回该字段,这是您因为未导出该字段而出错的时候。