### 如题,另外以下三段有什么区别吗,哪个性能上更好?怎么分析一下
#### 第一段
```
ch := make(chan string, 10)
go func() {
for i := 0; i < 10; i++ {
fmt.Println("input ", i)
ch <- strconv.Itoa(i)
}
}()
go func() {
LOOP:
for {
select {
case m1 := <-ch:
println("m1", m1)
default:
break LOOP
}
}
}()
```
#### 第二段
```
go func() {
for i := 0; i < 10; i++ {
fmt.Println("input ", i)
ch <- strconv.Itoa(i)
}
}()
go func() {
LOOP:
for {
select {
case m1 := <-ch:
println("m1", m1)
default:
goto LOOP
}
}
}()
```
#### 第三段
```
ch := make(chan string, 10)
go func() {
for i := 0; i < 10; i++ {
fmt.Println("input ", i)
ch <- strconv.Itoa(i)
}
}()
go func() {
for {
select {
case m1 := <-ch:
println("m1", m1)
default:
}
}
}()
```
3楼 <a href="/user/yaxiaomu" title="@yaxiaomu">@yaxiaomu</a> 一个简单的例子:
官方提供的database/sql.go 文件中的代码
```
func (db *DB) conn(ctx context.Context, strategy connReuseStrategy) (*driverConn, error) {
db.mu.Lock()
if db.closed {
db.mu.Unlock()
return nil, errDBClosed
}
// Check if the context is expired.
select {
default:
case <-ctx.Done():
db.mu.Unlock()
return nil, ctx.Err()
}
lifetime := db.maxLifetime
// ... balabala
}
```
#8
更多评论
select当然不需要for配合啊,
最典型的例子。
你需要执行一个任务,又需要能在超时时做一些额外处理。
你那3个自立和效率没关系,功能都不一样
#2