xorm/examples/maxconnect.go

107 lines
1.9 KiB
Go
Raw Normal View History

2013-08-29 09:26:33 +00:00
package main
import (
2014-01-07 09:33:27 +00:00
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/lunny/xorm"
xorm "github.com/lunny/xorm"
_ "github.com/mattn/go-sqlite3"
"os"
"runtime"
2013-08-29 09:26:33 +00:00
)
type User struct {
2014-01-07 09:33:27 +00:00
Id int64
Name string
2013-08-29 09:26:33 +00:00
}
func sqliteEngine() (*xorm.Engine, error) {
2014-01-07 09:33:27 +00:00
os.Remove("./test.db")
return xorm.NewEngine("sqlite3", "./goroutine.db")
2013-08-29 09:26:33 +00:00
}
func mysqlEngine() (*xorm.Engine, error) {
2014-01-07 09:33:27 +00:00
return xorm.NewEngine("mysql", "root:@/test?charset=utf8")
2013-08-29 09:26:33 +00:00
}
var u *User = &User{}
func test(engine *xorm.Engine) {
2014-01-07 09:33:27 +00:00
err := engine.CreateTables(u)
if err != nil {
fmt.Println(err)
return
}
2013-08-29 09:26:33 +00:00
2014-01-07 09:33:27 +00:00
engine.ShowSQL = true
engine.Pool.SetMaxConns(5)
size := 1000
queue := make(chan int, size)
2013-08-29 09:26:33 +00:00
2014-01-07 09:33:27 +00:00
for i := 0; i < size; i++ {
go func(x int) {
//x := i
err := engine.Test()
if err != nil {
fmt.Println(err)
} else {
err = engine.Map(u)
if err != nil {
fmt.Println("Map user failed")
} else {
for j := 0; j < 10; j++ {
if x+j < 2 {
_, err = engine.Get(u)
} else if x+j < 4 {
users := make([]User, 0)
err = engine.Find(&users)
} else if x+j < 8 {
_, err = engine.Count(u)
} else if x+j < 16 {
_, err = engine.Insert(&User{Name: "xlw"})
} else if x+j < 32 {
_, err = engine.Id(1).Delete(u)
}
if err != nil {
fmt.Println(err)
queue <- x
return
}
}
fmt.Printf("%v success!\n", x)
}
}
queue <- x
}(i)
}
2013-08-29 09:26:33 +00:00
2014-01-07 09:33:27 +00:00
for i := 0; i < size; i++ {
<-queue
}
2013-08-29 09:26:33 +00:00
2014-01-07 09:33:27 +00:00
fmt.Println("end")
2013-08-29 09:26:33 +00:00
}
func main() {
2014-01-07 09:33:27 +00:00
runtime.GOMAXPROCS(2)
fmt.Println("create engine")
engine, err := sqliteEngine()
if err != nil {
fmt.Println(err)
return
}
engine.ShowSQL = true
fmt.Println(engine)
test(engine)
fmt.Println("------------------------")
engine.Close()
2013-08-29 09:26:33 +00:00
2014-01-07 09:33:27 +00:00
engine, err = mysqlEngine()
if err != nil {
fmt.Println(err)
return
}
defer engine.Close()
test(engine)
2013-08-29 09:26:33 +00:00
}