[BUG]runtime error: hash of unhashable type Model.User #935

Open
opened 2018-05-10 02:50:44 +00:00 by hirorogithub · 0 comments
hirorogithub commented 2018-05-10 02:50:44 +00:00 (Migrated from github.com)

When I try to insert some data ,it panic from xorm.But I have use Insert normally without any other bug

//I dont know why insert has bug ,
//I have try to report this bug
//be careful with session.Insert()
, err = session.InsertOne(&userInfo) //this is ok
//
, err = session.Insert(userInfo) //bug here
if err != nil {
session.Rollback()
log.Error(err)
return -1, err
}
`
and the panic log:runtime error: hash of unhashable type Model.User
/usr/local/go/src/runtime/panic.go:491 (0x42cbb2)
/usr/local/go/src/runtime/alg.go:166 (0x40245f)
/usr/local/go/src/runtime/hashmap.go:416 (0x409f02)
/home/curi/go/src/github.com/go-xorm/xorm/session_insert.go:378 (0x9c462b)
/home/curi/go/src/github.com/go-xorm/xorm/session_insert.go:522 (0x9a3e2d)
/home/curi/go/src/github.com/go-xorm/xorm/session_insert.go:48 (0x99ee01)
/home/curi/hiro/HKLover2/Module/User/Service.go:111 (0xa6e6b3)
/home/curi/hiro/HKLover2/Module/User/Service.go:267 (0xa6fffe)
/home/curi/hiro/HKLover2/Module/User/Action.go:101 (0xa7c3bf)
/home/curi/hiro/HKLover2/Server/SingleServer.go:123 (0xa25817)
/home/curi/hiro/HKLover2/Module/User/Action.go:99 (0xa6a4c0)
/home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2)
/home/curi/go/src/github.com/gin-contrib/sessions/sessions.go:67 (0xa1243f)
/home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2)
/home/curi/hiro/HKLover2/Server/GinLogger.go:17 (0xa24059)
/home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2)
/home/curi/go/src/github.com/gin-gonic/gin/recovery.go:46 (0x8f1179)
/home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2)
/home/curi/go/src/github.com/gin-gonic/gin/logger.go:83 (0x8f04ab)
/home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2)
/home/curi/go/src/github.com/gin-gonic/gin/gin.go:359 (0x8e7ff5)
/home/curi/go/src/github.com/gin-gonic/gin/gin.go:326 (0x8e778a)
/usr/local/go/src/net/http/server.go:2619 (0x676c93)
/usr/local/go/src/net/http/server.go:1801 (0x672ddc)
/usr/local/go/src/runtime/asm_amd64.s:2337 (0x45d8e0)

and my struct is like:
type User struct { util.DefaultInfo xorm:"extends" binding:"-"util.CommonUserInfoxorm:"extends"`

//基础信息
Birthday time.Time `json:"birthday" form:"birthday" xorm:"'birthday'" `
Age      int       `json:"age" form:"age" xorm:"'age'"`
Gender   int       `json:"gender" form:"gender" xorm:"'gender'"` //性别 1女  2男
Zodiac   int       `json:"zodiac" form:"zodiac" xorm:"'zodiac'"` //星座 0-12
Weight   int       `json:"weight" form:"weight" xorm:"'weight'"` //体重
Height   int       `json:"height" form:"height" xorm:"'height'"` //身高
Edu      int       `json:"edu" form:"edu" xorm:"'edu'"`          // 教育程度 0小学 1初中 2高中 3中专 4大专 5本科 6硕士 7博士
Income   int       `json:"income" form:"income" xorm:"'income'"` // 收入 0(<2k ) 1( 2k-6k) 2(6k-1w ) 3 (1w-1.5w) 4(1.5-2) 5(2-5) 7(>5)
House    int       `json:"house" form:"house" xorm:"'house'"`    //  购房情况 (0 已购 1.计划购 2.暂无计划购)
Car      int       `json:"car" form:"car" xorm:"'car'"`          //  购车情况 (0 已购 1.计划购 2.暂无计划购)

//个人信息
School      string   `json:"school" form:"school" xorm:"'school'"`                              // 毕业院校
Bro         int      `json:"bro" form:"bro" xorm:"'bro'"`                                       //家庭情况(有无兄弟姐妹) (0 独生 1有你妹)
Hometown    string   `json:"hometown" form:"hometown" xorm:"'hometown'"`                        // 家乡 as location
Drink       int      `json:"drink" form:"drink" xorm:"'drink'"`                                 //饮酒 (0.never 1.stime 2. everyday)
Smoke       int      `json:"smoke" form:"smoke" xorm:"'smoke'"`                                 //吸烟 (0.never and hate / 1.never not hate/ 2. stime 3.everyday )
Faith       int      `json:"faith" form:"faith" xorm:"'faith'"`                                 //信仰 (0.null 1. 佛 2. 道 3. 基督 4. 伊斯兰 5.天主教 6.其他)
Food        int      `json:"food" form:"food" xorm:"'food'"`                                    //饮食 (0.null 1. 辣 2. 肉 3. 素)
Rest        int      `json:"rest" form:"rest" xorm:"'rest'"`                                    //作息 (0.早睡早起 1.夜猫子 2.偶尔懒散 3.没有规律)
PersonIntro string   `json:"personIntro" form:"personIntro" xorm:"'personIntro' varchar(1024)"` //自我介绍
Hobby       string   `json:"hobby" form:"hobby" xorm:"'hobby' varchar(1024)"`                   //兴趣
Album       []string `json:"album" form:"album" xorm:"'album' json text"`

// 择偶
PreferAge    string `json:"preferAge" form:"preferAge" xorm:"'preferAge'"`          //年龄范围
PreferHeight string `json:"preferHeight" form:"preferHeight" xorm:"'preferHeight'"` //身高范围
PreferIncome int    `json:"preferIncome" form:"preferIncome" xorm:"'preferIncome'"` //收入范围   // 0(un limit) 1(>2k ) 2( >6k) 3(>1w ) 4(>1.5w) 5(>2) 6(>5) 7(>5)
PreferEdu    int    `json:"preferEdu" form:"preferEdu" xorm:"'preferEdu'"`          //教育程度   // 0(num limit) 1(>大专) 2(>本科) 3(>硕士) 4(>博士)

IndustryID     int `json:"industryID" form:"industryID" xorm:"'industryID'"`
IndustryStatus int `json:"industryStatus" form:"industryStatus" xorm:"'industryStatus'"` // 1--in group 2-- not in group

}
type DefaultInfo struct {
ID int json:"id" form:"id" xorm:"'id' pk autoincr unique"
CreateAt time.Time json:"createAt" xorm:"'createAt' created"
UpdateAt time.Time json:"updateAt" xorm:"'updateAt' updated"
DeleteAt time.Time json:"deleteAt" xorm:"'deleteAt' deleted"
}
type CommonUserInfo struct {
Location string json:"location" form:"location" xorm:"'location'"
Name string json:"name" form:"name" xorm:"'name'"
UID int json:"uid" form:"uid" xorm:"'uid' unique" binding:"required"
Phone string json:"phone" form:"phone" xorm:"'phone'"
Industry string json:"industry" form:"industry" xorm:"'industry'"
Intro string json:"intro" form:"intro" xorm:"'intro'"
Avatar string json:"avatar" form:"avatar" xorm:"'avatar'"
Status int json:"status" form:"status" xorm:"'status'" //!!
Watch int json:"watch" form:"watch" xorm:"'watch' default(0)" //
}
`

When I try to insert some data ,it panic from xorm.But I have use Insert normally without any other bug `//I don`t know why insert has bug , //I have try to report this bug //be careful with session.Insert() _, err = session.InsertOne(&userInfo) //this is ok //_, err = session.Insert(userInfo) //bug here if err != nil { session.Rollback() log.Error(err) return -1, err } ` and the panic log:runtime error: hash of unhashable type Model.User /usr/local/go/src/runtime/panic.go:491 (0x42cbb2) /usr/local/go/src/runtime/alg.go:166 (0x40245f) /usr/local/go/src/runtime/hashmap.go:416 (0x409f02) /home/curi/go/src/github.com/go-xorm/xorm/session_insert.go:378 (0x9c462b) /home/curi/go/src/github.com/go-xorm/xorm/session_insert.go:522 (0x9a3e2d) /home/curi/go/src/github.com/go-xorm/xorm/session_insert.go:48 (0x99ee01) /home/curi/hiro/HKLover2/Module/User/Service.go:111 (0xa6e6b3) /home/curi/hiro/HKLover2/Module/User/Service.go:267 (0xa6fffe) /home/curi/hiro/HKLover2/Module/User/Action.go:101 (0xa7c3bf) /home/curi/hiro/HKLover2/Server/SingleServer.go:123 (0xa25817) /home/curi/hiro/HKLover2/Module/User/Action.go:99 (0xa6a4c0) /home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2) /home/curi/go/src/github.com/gin-contrib/sessions/sessions.go:67 (0xa1243f) /home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2) /home/curi/hiro/HKLover2/Server/GinLogger.go:17 (0xa24059) /home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2) /home/curi/go/src/github.com/gin-gonic/gin/recovery.go:46 (0x8f1179) /home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2) /home/curi/go/src/github.com/gin-gonic/gin/logger.go:83 (0x8f04ab) /home/curi/go/src/github.com/gin-gonic/gin/context.go:107 (0x8deee2) /home/curi/go/src/github.com/gin-gonic/gin/gin.go:359 (0x8e7ff5) /home/curi/go/src/github.com/gin-gonic/gin/gin.go:326 (0x8e778a) /usr/local/go/src/net/http/server.go:2619 (0x676c93) /usr/local/go/src/net/http/server.go:1801 (0x672ddc) /usr/local/go/src/runtime/asm_amd64.s:2337 (0x45d8e0) and my struct is like: `type User struct { util.DefaultInfo `xorm:"extends" binding:"-"` util.CommonUserInfo `xorm:"extends"` //基础信息 Birthday time.Time `json:"birthday" form:"birthday" xorm:"'birthday'" ` Age int `json:"age" form:"age" xorm:"'age'"` Gender int `json:"gender" form:"gender" xorm:"'gender'"` //性别 1女 2男 Zodiac int `json:"zodiac" form:"zodiac" xorm:"'zodiac'"` //星座 0-12 Weight int `json:"weight" form:"weight" xorm:"'weight'"` //体重 Height int `json:"height" form:"height" xorm:"'height'"` //身高 Edu int `json:"edu" form:"edu" xorm:"'edu'"` // 教育程度 0小学 1初中 2高中 3中专 4大专 5本科 6硕士 7博士 Income int `json:"income" form:"income" xorm:"'income'"` // 收入 0(<2k ) 1( 2k-6k) 2(6k-1w ) 3 (1w-1.5w) 4(1.5-2) 5(2-5) 7(>5) House int `json:"house" form:"house" xorm:"'house'"` // 购房情况 (0 已购 1.计划购 2.暂无计划购) Car int `json:"car" form:"car" xorm:"'car'"` // 购车情况 (0 已购 1.计划购 2.暂无计划购) //个人信息 School string `json:"school" form:"school" xorm:"'school'"` // 毕业院校 Bro int `json:"bro" form:"bro" xorm:"'bro'"` //家庭情况(有无兄弟姐妹) (0 独生 1有你妹) Hometown string `json:"hometown" form:"hometown" xorm:"'hometown'"` // 家乡 as location Drink int `json:"drink" form:"drink" xorm:"'drink'"` //饮酒 (0.never 1.stime 2. everyday) Smoke int `json:"smoke" form:"smoke" xorm:"'smoke'"` //吸烟 (0.never and hate / 1.never not hate/ 2. stime 3.everyday ) Faith int `json:"faith" form:"faith" xorm:"'faith'"` //信仰 (0.null 1. 佛 2. 道 3. 基督 4. 伊斯兰 5.天主教 6.其他) Food int `json:"food" form:"food" xorm:"'food'"` //饮食 (0.null 1. 辣 2. 肉 3. 素) Rest int `json:"rest" form:"rest" xorm:"'rest'"` //作息 (0.早睡早起 1.夜猫子 2.偶尔懒散 3.没有规律) PersonIntro string `json:"personIntro" form:"personIntro" xorm:"'personIntro' varchar(1024)"` //自我介绍 Hobby string `json:"hobby" form:"hobby" xorm:"'hobby' varchar(1024)"` //兴趣 Album []string `json:"album" form:"album" xorm:"'album' json text"` // 择偶 PreferAge string `json:"preferAge" form:"preferAge" xorm:"'preferAge'"` //年龄范围 PreferHeight string `json:"preferHeight" form:"preferHeight" xorm:"'preferHeight'"` //身高范围 PreferIncome int `json:"preferIncome" form:"preferIncome" xorm:"'preferIncome'"` //收入范围 // 0(un limit) 1(>2k ) 2( >6k) 3(>1w ) 4(>1.5w) 5(>2) 6(>5) 7(>5) PreferEdu int `json:"preferEdu" form:"preferEdu" xorm:"'preferEdu'"` //教育程度 // 0(num limit) 1(>大专) 2(>本科) 3(>硕士) 4(>博士) IndustryID int `json:"industryID" form:"industryID" xorm:"'industryID'"` IndustryStatus int `json:"industryStatus" form:"industryStatus" xorm:"'industryStatus'"` // 1--in group 2-- not in group } type DefaultInfo struct { ID int `json:"id" form:"id" xorm:"'id' pk autoincr unique"` CreateAt time.Time `json:"createAt" xorm:"'createAt' created"` UpdateAt time.Time `json:"updateAt" xorm:"'updateAt' updated"` DeleteAt time.Time `json:"deleteAt" xorm:"'deleteAt' deleted"` } type CommonUserInfo struct { Location string `json:"location" form:"location" xorm:"'location'"` Name string `json:"name" form:"name" xorm:"'name'"` UID int `json:"uid" form:"uid" xorm:"'uid' unique" binding:"required"` Phone string `json:"phone" form:"phone" xorm:"'phone'"` Industry string `json:"industry" form:"industry" xorm:"'industry'"` Intro string `json:"intro" form:"intro" xorm:"'intro'"` Avatar string `json:"avatar" form:"avatar" xorm:"'avatar'"` Status int `json:"status" form:"status" xorm:"'status'"` //!! Watch int `json:"watch" form:"watch" xorm:"'watch' default(0)"` // } `
Sign in to join this conversation.
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: xorm/xorm#935
No description provided.