我有一个名为print()每 2 秒打印一次数字的函数,该函数在 goroutine 中运行。
我需要将其标准输出打印传递给一个变量并打印它,但不是一次,直到它完成。
我需要有一个无限循环中的扫描仪,它将扫描标准输出并打印它,一旦功能完成,扫描仪也将完成。
我试图使用这个答案,但它没有打印任何东西。
这就是我试图做的:
package main
import (
"bufio"
"fmt"
"os"
"sync"
"time"
)
func print() {
for i := 0; i < 50; i++ {
time.Sleep(2 * time.Second)
fmt.Printf("hello number: %d\n", i)
}
}
func main() {
old := os.Stdout // keep backup of the real stdout
defer func() { os.Stdout = old }()
r, w, _ := os.Pipe()
os.Stdout = w
go print()
var wg sync.WaitGroup
c := make(chan struct{})
wg.Add(1)
defer wg.Done()
for {
<-c
scanner := bufio.NewScanner(r)
for scanner.Scan() {
m := scanner.Text()
fmt.Println("output: " + m)
}
}
c <- struct{}{}
wg.Wait()
fmt.Println("DONE")
}
饮歌长啸
相关分类