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  }