登录
首页 >  Golang >  Go问答

将一个函数的输出通过管道传输给另一个函数,并在其基础上使用 fzf 进行处理

来源:stackoverflow

时间:2024-03-28 11:21:29 457浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《将一个函数的输出通过管道传输给另一个函数,并在其基础上使用 fzf 进行处理》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

假设我们有以下函数:

func example() {
   fmt.println("january")
   fmt.println("february")
   fmt.println("march")
}

现在我们需要另一个函数,它将上述函数的输出传递给 bash 命令 fzf,您将如何实现这一点?

我知道我必须将标准输出重定向到标准输入,并且有一个 os.pipe 的完整概念

所以我尝试先捕获标准输出:

func capture(f func()) string {
  out := os.Stdout
  r, w, _ := os.Pipe()
  os.Stdout = w

  w.Close()
  os.Stdout = out

  var buf bytes.Buffer
  io.Copy(&buf, r)
  return buf.String()
}

没有成功,我还没有弄清楚将标准输出发送到执行 fzf 的函数的部分


正确答案


PlayGround

我编辑了你的代码,现在看起来可以工作了,请检查一下。

package main

import (
    "bytes"
    "fmt"
    "io"
    "os"
)

func example() {
    fmt.Println("January")
    fmt.Println("February")
    fmt.Println("March")
}

func main() {
    str := capture(example)
    println("start", str, "end")

}

func capture(f func()) string {

    stdout := os.Stdout
    r, w, _ := os.Pipe()
    os.Stdout = w

    f()

    ChnOut := make(chan string)

    go func() {
        var buf bytes.Buffer
        io.Copy(&buf, r)
        ChnOut <- buf.String()
    }()

    w.Close()
    os.Stdout = stdout
    str := <-ChnOut

    return str
}

如果我错过了什么,请告诉我。我愿意提供帮助。

今天关于《将一个函数的输出通过管道传输给另一个函数,并在其基础上使用 fzf 进行处理》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>