Inspired by fatih/pool
pool, err := NewChannelPool(100, func() (net.Conn, error) { return net.Dial("tcp", addr) })
conn, err := pool.Get("1111")
if _, err := conn.Write([]byte("message")); err != nil {
conn.Close()
}
// error出ないときはClose()しなくてよい
setLabelConnが並列で呼ばれた場合に上書きしちゃうのでは?