万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    golangでgorpの使い方

    Golang Cafe #41 まとめ gorpを試す。 - taknb2nchのメモ

    を見たが、すべてのコードがなかった。

    importを追加した。 sqlite3のファイル名はfoo.dbが出来る。 もともとあれば一旦削除される。

    package main
    
    import (
        "time"
        "fmt"
        "os"
        "math/rand"
        "math/big"
        "database/sql"
        _ "github.com/mattn/go-sqlite3"
        "github.com/coopernurse/gorp"
    )
    
    type Person struct {
        Id int32
        Name sql.NullString
        Age sql.NullInt64
        Sex sql.NullBool
        Height sql.NullFloat64
        Birthday time.Time
        BString []byte
        BBigInt []byte
    }
    
    func main() {
        os.Remove("./foo.db")
        db, err := sql.Open("sqlite3", "./foo.db")
        if err != nil {
            panic(err.Error())
        }
    
        dbmap := gorp.DbMap{Db: db, Dialect: gorp.SqliteDialect{}}
        t := dbmap.AddTableWithName(Person{}, "person").SetKeys(true, "Id")
        t.ColMap("Id").Rename("id")
        t.ColMap("Name").Rename("name")
        t.ColMap("Age").Rename("age")
        t.ColMap("Sex").Rename("sex")
        t.ColMap("Height").Rename("height")
        t.ColMap("Birthday").Rename("birthday")
        t.ColMap("BString").Rename("bstring")
        t.ColMap("BBigInt").Rename("bbigint")
        dbmap.DropTables()
        err = dbmap.CreateTables()
        if err != nil {
            panic(err.Error())
        }
    
        tx, _ := dbmap.Begin()
        for i := 0; i < 100; i++ {
    
            p := Person{}
            if rand.Float32() > 0.5 {
                p.Name.Scan(fmt.Sprintf("mattn%03d", i))
            }
    
            if rand.Float32() > 0.5 {
                p.Age.Scan(i)
            }
    
            if rand.Float32() > 0.5 {
                p.Sex.Scan(rand.Float32() > 0.5)
            }
    
            if rand.Float32() > 0.5 {
                p.Height.Scan(rand.Float32())
            }
    
            if rand.Float32() > 0.5 {
                p.Birthday = time.Now()
            }
    
            if rand.Float32() > 0.5 {
                p.BString = []byte(fmt.Sprintf("mattn%03d", i))
            }
    
            if rand.Float32() > 0.5 {
                p.BBigInt = big.NewInt(int64(i * 10000)).Bytes()
            }
    
            err = tx.Insert(&p)
            if err != nil {
                tx.Rollback()
                panic(err.Error())
            }
        }
        tx.Commit()
    
        list, _ := dbmap.Select(&Person{}, "select * from person")
        for _, l := range list {
            p := l.(*Person)
    
            var (
                bstring string
                bbigint big.Int
            )
    
            if p.BString != nil {
                bstring = string(p.BString)
            }
    
            if p.BBigInt != nil {
                bbigint = big.Int{}
                bbigint.SetBytes(p.BBigInt)
            }
    
            fmt.Printf("%d, %s, %d, %t, %f, %v, %d\n", p.Id, p.Name, p.Age, p.Sex, p.Height, bstring, bbigint)
        }
    }
    go run main.go