美文网首页
Golang中WaitGroup的使用

Golang中WaitGroup的使用

作者: Lis_ | 来源:发表于2023-04-17 17:43 被阅读0次

最近处理一个需求,在golang进程中执行一个脚本,并且能够在主进程中获取脚本的输出,参照github上一些大神的代码,在此记录一下。

package main

import (
    "bufio"
    "fmt"
    "io"
    "os/exec"
    "sync"
)

func main() {
    Command("ping www.baidu.com")
}

func Command(cmd string) error {
    // 创建要执行的命令,返回一个command的结构体,所要执行的命令其实是基于当前进程创建了一个子进程
    c := exec.Command("bash", "-c", cmd)
    stdout, err := c.StdoutPipe()
    if err != nil {
        return err
    }
    var wg sync.WaitGroup
    // 在主进程中设置计数器加1
    wg.Add(1)
    go func() {
           // 在goroutine中执行完成被等待的业务逻辑后计数器减1
        defer wg.Done()
        reader := bufio.NewReader(stdout)
        for {
            readString, err := reader.ReadString('\n')
            if err != nil || err == io.EOF {
                return
            }
            fmt.Print(readString)
        }
    }()
        // 开始执行cmd的要运行的命令
    err = c.Start()
        // 在主进程中阻塞直到要等待的业务完成计数器为0,阻塞解除
    wg.Wait()
    return err
}

相关文章

网友评论

      本文标题:Golang中WaitGroup的使用

      本文链接:https://www.haomeiwen.com/subject/yurcjdtx.html