我已经在stdout和stderr goroutine中添加了以下内容(go func()…)以等待获取output
并完成error
。
现在,我希望外部功能等待,直到两个例程都结束。
func exec(stdout io.reader,stderr io.reader) (*bufio.Scanner,*bufio.Scanner) {
scanout := bufio.NewScanner(stdout)
scanout.Split(bufio.ScanRunes)
go func() {
for scanout.Scan() {
fmt.Print(scanout.Text())
}
}()
go func() {
scanerr.Split(bufio.ScanRunes)
for scanerr.Scan() {
fmt.Print(scanerr.Text())
}
}()
}
现在,我尝试添加等待组,但由于无法确定如何传递等待组实例而无法正常工作,
func exec(stdout io.reader,*bufio.Scanner) {
scanout := bufio.NewScanner(stdout)
scanout.Split(bufio.ScanRunes)
var waitgroup sync.WaitGroup
waitgroup.Add(1)
go func() {
for scanout.Scan() {
fmt.Print(scanout.Text())
}
}()
waitgroup.Wait()
waitgroup.Add(1)
go func() {
scanerr.Split(bufio.ScanRunes)
for scanerr.Scan() {
fmt.Print(scanerr.Text())
}
}()
waitgroup.Wait()
}
更新
应该是这样吗?
func exec(stdout io.reader,*bufio.Scanner) {
scanout := bufio.NewScanner(stdout)
scanout.Split(bufio.ScanRunes)
var waitgroup sync.WaitGroup
waitgroup.Add(2)
go func() {
for scanout.Scan() {
fmt.Print(scanout.Text())
}
}()
go func() {
scanerr.Split(bufio.ScanRunes)
for scanerr.Scan() {
fmt.Print(scanerr.Text())
}
}()
waitgroup.Wait()
}