xorm/examples/goroutine.go

109 lines
1.9 KiB
Go
Raw Normal View History

2013-06-16 03:05:16 +00:00
package main
import (
2014-01-07 09:33:27 +00:00
"fmt"
2014-01-25 02:31:07 +00:00
"os"
"runtime"
2014-01-07 09:33:27 +00:00
_ "github.com/go-sql-driver/mysql"
2014-04-11 09:16:43 +00:00
"github.com/go-xorm/xorm"
2014-01-07 09:33:27 +00:00
_ "github.com/mattn/go-sqlite3"
2013-06-16 03:05:16 +00:00
)
2017-01-09 01:52:23 +00:00
// User describes a user
2013-06-16 03:05:16 +00:00
type User struct {
2014-01-07 09:33:27 +00:00
Id int64
Name string
2013-06-16 03:05:16 +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-06-16 03:05:16 +00:00
}
func mysqlEngine() (*xorm.Engine, error) {
2014-01-07 09:33:27 +00:00
return xorm.NewEngine("mysql", "root:@/test?charset=utf8")
2013-06-16 03:05:16 +00:00
}
var u = &User{}
2013-06-16 03:05:16 +00:00
2013-06-21 04:33:54 +00:00
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-06-16 03:05:16 +00:00
2015-08-12 14:02:27 +00:00
size := 100
2014-01-07 09:33:27 +00:00
queue := make(chan int, size)
2013-06-16 03:05:16 +00:00
2014-01-07 09:33:27 +00:00
for i := 0; i < size; i++ {
go func(x int) {
//x := i
2014-01-25 02:31:07 +00:00
err := engine.Ping()
2014-01-07 09:33:27 +00:00
if err != nil {
fmt.Println(err)
} else {
2014-01-25 02:31:07 +00:00
/*err = engine.(u)
2014-01-07 09:33:27 +00:00
if err != nil {
fmt.Println("Map user failed")
2014-01-25 02:31:07 +00:00
} 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)
2014-01-25 02:31:07 +00:00
}
if err != nil {
fmt.Println(err)
queue <- x
return
2014-01-07 09:33:27 +00:00
}
}
2014-01-25 02:31:07 +00:00
fmt.Printf("%v success!\n", x)
//}
2014-01-07 09:33:27 +00:00
}
queue <- x
}(i)
}
2013-06-16 03:05:16 +00:00
2014-01-07 09:33:27 +00:00
for i := 0; i < size; i++ {
<-queue
}
2013-06-21 04:33:54 +00:00
2014-01-07 09:33:27 +00:00
//conns := atomic.LoadInt32(&xorm.ConnectionNum)
//fmt.Println("connection number:", conns)
fmt.Println("end")
2013-06-16 03:05:16 +00:00
}
2013-06-21 04:33:54 +00:00
func main() {
2015-08-12 14:02:27 +00:00
runtime.GOMAXPROCS(2)
2014-01-07 09:33:27 +00:00
fmt.Println("-----start sqlite go routines-----")
engine, err := sqliteEngine()
if err != nil {
fmt.Println(err)
return
}
engine.ShowSQL = true
fmt.Println(engine)
test(engine)
fmt.Println("test end")
engine.Close()
2013-06-21 04:33:54 +00:00
2014-01-07 09:33:27 +00:00
fmt.Println("-----start mysql go routines-----")
engine, err = mysqlEngine()
if err != nil {
fmt.Println(err)
return
}
defer engine.Close()
test(engine)
2013-06-21 04:33:54 +00:00
}