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  }