conversion.go 1.2 KB

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