github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-xorm/xorm/examples/cachegoroutine.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "time" 7 8 _ "github.com/go-sql-driver/mysql" 9 "github.com/insionng/yougam/libraries/xorm" 10 _ "github.com/mattn/go-sqlite3" 11 ) 12 13 type User struct { 14 Id int64 15 Name string 16 } 17 18 func sqliteEngine() (*xorm.Engine, error) { 19 os.Remove("./test.db") 20 return xorm.NewEngine("sqlite3", "./goroutine.db") 21 } 22 23 func mysqlEngine() (*xorm.Engine, error) { 24 return xorm.NewEngine("mysql", "root:@/test?charset=utf8") 25 } 26 27 var u = &User{} 28 29 func test(engine *xorm.Engine) { 30 err := engine.CreateTables(u) 31 if err != nil { 32 fmt.Println(err) 33 return 34 } 35 36 size := 500 37 queue := make(chan int, size) 38 39 for i := 0; i < size; i++ { 40 go func(x int) { 41 //x := i 42 err := engine.Ping() 43 if err != nil { 44 fmt.Println(err) 45 } else { 46 for j := 0; j < 10; j++ { 47 if x+j < 2 { 48 _, err = engine.Get(u) 49 } else if x+j < 4 { 50 users := make([]User, 0) 51 err = engine.Find(&users) 52 } else if x+j < 8 { 53 _, err = engine.Count(u) 54 } else if x+j < 16 { 55 _, err = engine.Insert(&User{Name: "xlw"}) 56 } else if x+j < 32 { 57 //_, err = engine.Id(1).Delete(u) 58 _, err = engine.Delete(u) 59 } 60 if err != nil { 61 fmt.Println(err) 62 queue <- x 63 return 64 } 65 } 66 fmt.Printf("%v success!\n", x) 67 } 68 queue <- x 69 }(i) 70 } 71 72 for i := 0; i < size; i++ { 73 <-queue 74 } 75 76 //conns := atomic.LoadInt32(&xorm.ConnectionNum) 77 //fmt.Println("connection number:", conns) 78 fmt.Println("end") 79 } 80 81 func main() { 82 fmt.Println("-----start sqlite go routines-----") 83 engine, err := sqliteEngine() 84 if err != nil { 85 fmt.Println(err) 86 return 87 } 88 engine.ShowSQL(true) 89 cacher := xorm.NewLRUCacher2(xorm.NewMemoryStore(), time.Hour, 1000) 90 engine.SetDefaultCacher(cacher) 91 fmt.Println(engine) 92 test(engine) 93 fmt.Println("test end") 94 engine.Close() 95 96 fmt.Println("-----start mysql go routines-----") 97 engine, err = mysqlEngine() 98 engine.ShowSQL(true) 99 cacher = xorm.NewLRUCacher2(xorm.NewMemoryStore(), time.Hour, 1000) 100 engine.SetDefaultCacher(cacher) 101 if err != nil { 102 fmt.Println(err) 103 return 104 } 105 defer engine.Close() 106 test(engine) 107 }