/Godeps/_workspace/src/github.com/go-xorm/xorm/examples/maxconnect.go

https://github.com/codetainerapp/codetainer · Go · 107 lines · 87 code · 14 blank · 6 comment · 25 complexity · c3331d7d5e2da717db00925046c068b3 MD5 · raw file

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