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