github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/go-xorm/xorm/examples/goroutine.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "runtime" 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 := 100 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 /*err = engine.(u) 47 if err != nil { 48 fmt.Println("Map user failed") 49 } else {*/ 50 for j := 0; j < 10; j++ { 51 if x+j < 2 { 52 _, err = engine.Get(u) 53 } else if x+j < 4 { 54 users := make([]User, 0) 55 err = engine.Find(&users) 56 } else if x+j < 8 { 57 _, err = engine.Count(u) 58 } else if x+j < 16 { 59 _, err = engine.Insert(&User{Name: "xlw"}) 60 } else if x+j < 32 { 61 _, err = engine.Id(1).Delete(u) 62 } 63 if err != nil { 64 fmt.Println(err) 65 queue <- x 66 return 67 } 68 } 69 fmt.Printf("%v success!\n", x) 70 //} 71 } 72 queue <- x 73 }(i) 74 } 75 76 for i := 0; i < size; i++ { 77 <-queue 78 } 79 80 //conns := atomic.LoadInt32(&xorm.ConnectionNum) 81 //fmt.Println("connection number:", conns) 82 fmt.Println("end") 83 } 84 85 func main() { 86 runtime.GOMAXPROCS(2) 87 fmt.Println("-----start sqlite go routines-----") 88 engine, err := sqliteEngine() 89 if err != nil { 90 fmt.Println(err) 91 return 92 } 93 engine.ShowSQL = true 94 fmt.Println(engine) 95 test(engine) 96 fmt.Println("test end") 97 engine.Close() 98 99 fmt.Println("-----start mysql go routines-----") 100 engine, err = mysqlEngine() 101 if err != nil { 102 fmt.Println(err) 103 return 104 } 105 defer engine.Close() 106 test(engine) 107 }