goroutine.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. size := 100
  29. queue := make(chan int, size)
  30. for i := 0; i < size; i++ {
  31. go func(x int) {
  32. //x := i
  33. err := engine.Ping()
  34. if err != nil {
  35. fmt.Println(err)
  36. } else {
  37. /*err = engine.(u)
  38. if err != nil {
  39. fmt.Println("Map user failed")
  40. } else {*/
  41. for j := 0; j < 10; j++ {
  42. if x+j < 2 {
  43. _, err = engine.Get(u)
  44. } else if x+j < 4 {
  45. users := make([]User, 0)
  46. err = engine.Find(&users)
  47. } else if x+j < 8 {
  48. _, err = engine.Count(u)
  49. } else if x+j < 16 {
  50. _, err = engine.Insert(&User{Name: "xlw"})
  51. } else if x+j < 32 {
  52. _, err = engine.Id(1).Delete(u)
  53. }
  54. if err != nil {
  55. fmt.Println(err)
  56. queue <- x
  57. return
  58. }
  59. }
  60. fmt.Printf("%v success!\n", x)
  61. //}
  62. }
  63. queue <- x
  64. }(i)
  65. }
  66. for i := 0; i < size; i++ {
  67. <-queue
  68. }
  69. //conns := atomic.LoadInt32(&xorm.ConnectionNum)
  70. //fmt.Println("connection number:", conns)
  71. fmt.Println("end")
  72. }
  73. func main() {
  74. runtime.GOMAXPROCS(2)
  75. fmt.Println("-----start sqlite go routines-----")
  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("test end")
  85. engine.Close()
  86. fmt.Println("-----start mysql go routines-----")
  87. engine, err = mysqlEngine()
  88. if err != nil {
  89. fmt.Println(err)
  90. return
  91. }
  92. defer engine.Close()
  93. test(engine)
  94. }