通过管道可以实现多个进程间通信,协程之间也是可以的
package main
import (
"fmt"
"time"
"os"
"io/ioutil"
)
func NewPipe() (*os.File, *os.File, error) {
read, write, err := os.Pipe()
if err != nil {
return nil, nil, err
}
return read, write, nil
}
func main() {
fmt.Println("main starting")
stop := make(chan int)
r ,w ,_:= NewPipe()
go func() {
fmt.Println("int go run")
msg,_ := ioutil.ReadAll(r)
fmt.Printf("int go run get msg %s \n",string(msg))
<-stop
}()
w.WriteString("hello world")
w.Close()
time.Sleep(time.Second*3)
stop <- 1
fmt.Println("main end")
}
上面的代码先创建一个管道,分别给main和协程,运行并测试
main starting
int go run
int go run get msg hello world
main end