This is a creation in Article, where the information may have evolved or changed.
Chan is actually a queue, and is a queue with a lock waiting function, so it can do a lot of task queue related work, such as connection pool. Recently intends to use go to write a small software configuration management system, the use of found no connection pool, so it is Chan wrote a simple, use a bit found quite useful.
var Mysqlpool chan *mysql. Mysqlfunc getmysql () *mysql. MySQL {if Mysqlpool = = Nil {Mysqlpool = make (chan *mysql. MySQL, Max_pool_size)} If Len (mysqlpool) = = 0 {go func () {for i: = 0; i < MAX_POOL_SIZE/2; I + + MySQL: = mysql. New () Err: = MySQL. Connect ("127.0.0.1", "Root", "" "," WGT ", 3306) if err! = Nil {panic (err). String ())} putmysql (MySQL)}} ()} return <-mysqlpool} Func putmysql (Conn *mysql. MySQL) {if Mysqlpool = = Nil {Mysqlpool = make (chan *mysql. MySQL, Max_pool_size)} If Len (mysqlpool) = = max_pool_size {Conn. Close () return} Mysqlpool <-Conn}
Just dozens of lines of code can achieve a more perfect connection pool function, the expression of go language is really exciting.