2 回答
TA贡献1860条经验 获得超9个赞
转到语句
“ go”语句作为一个独立的并发控制线程或goroutine在同一地址空间内开始执行函数或方法调用。
GoStmt =“ go”表达式。
表达式必须是一个调用。函数值和参数在调用goroutine中照常进行评估,但是与常规调用不同,程序执行不等待被调用函数完成。取而代之的是,该函数开始在新的goroutine中独立执行。当函数终止时,其goroutine也终止。如果函数具有任何返回值,则在函数完成时将其丢弃。
将免费的goroutine转换为函数调用。
package main
import (
"bytes"
"io"
"log"
"os"
"os/exec"
)
func main() {
runCatFromStdinWorks(populateStdin("aaa\n"))
runCatFromStdinWorks(populateStdin("bbb\n"))
}
func populateStdin(str string) func(io.WriteCloser) {
return func(stdin io.WriteCloser) {
defer stdin.Close()
io.Copy(stdin, bytes.NewBufferString(str))
}
}
func runCatFromStdinWorks(populate_stdin_func func(io.WriteCloser)) {
cmd := exec.Command("cat")
stdin, err := cmd.StdinPipe()
if err != nil {
log.Panic(err)
}
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Panic(err)
}
err = cmd.Start()
if err != nil {
log.Panic(err)
}
populate_stdin_func(stdin)
io.Copy(os.Stdout, stdout)
err = cmd.Wait()
if err != nil {
log.Panic(err)
}
}
- 2 回答
- 0 关注
- 452 浏览
添加回答
举报