github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-xorm/xorm/examples/conversion.go (about) 1 package main 2 3 import ( 4 "errors" 5 "fmt" 6 "os" 7 8 "github.com/insionng/yougam/libraries/xorm" 9 _ "github.com/mattn/go-sqlite3" 10 ) 11 12 type Status struct { 13 Name string 14 Color string 15 } 16 17 var ( 18 Registed = Status{"Registed", "white"} 19 Approved = Status{"Approved", "green"} 20 Removed = Status{"Removed", "red"} 21 Statuses = map[string]Status{ 22 Registed.Name: Registed, 23 Approved.Name: Approved, 24 Removed.Name: Removed, 25 } 26 ) 27 28 func (s *Status) FromDB(bytes []byte) error { 29 if r, ok := Statuses[string(bytes)]; ok { 30 *s = r 31 return nil 32 } else { 33 return errors.New("no this data") 34 } 35 } 36 37 func (s *Status) ToDB() ([]byte, error) { 38 return []byte(s.Name), nil 39 } 40 41 type User struct { 42 Id int64 43 Name string 44 Status Status `xorm:"varchar(40)"` 45 } 46 47 func main() { 48 f := "conversion.db" 49 os.Remove(f) 50 51 Orm, err := xorm.NewEngine("sqlite3", f) 52 if err != nil { 53 fmt.Println(err) 54 return 55 } 56 Orm.ShowSQL(true) 57 err = Orm.CreateTables(&User{}) 58 if err != nil { 59 fmt.Println(err) 60 return 61 } 62 63 _, err = Orm.Insert(&User{1, "xlw", Registed}) 64 if err != nil { 65 fmt.Println(err) 66 return 67 } 68 69 users := make([]User, 0) 70 err = Orm.Find(&users) 71 if err != nil { 72 fmt.Println(err) 73 return 74 } 75 76 fmt.Println(users) 77 }