《零基础Go语言算法实战》
【题目 2-26】goroutine 的执行效率问题
请说出下面的代码存在什么问题。
package main
import "fmt"
type Func func(string) string
func exec(name string, vs ...Func) string {
ch := make(chan string)
fn := func(i int) {
ch <- vs[i](name)
}
for i, _ := range vs {
go fn(i)
}
return <-ch
}
func main() {
ret := exec("test", func(n string) string {
return n + "func1"
}, func(n string) string {
return n + "func2"
}, func(n string) string {
return n + "func3"
}, func(n string) string {
return n + "func4"
})
fmt.Println(ret)
}
【解答】
依据 4 个 goroutine 的启动后执行效率,很可能输出 testfunc4,但其他的 testfunc1 也可能
先执行,exec() 函数只会返回一条信息。