将一个函数的输出通过管道传输给另一个函数,并在其基础上使用 fzf 进行处理
短信预约 -IT技能 免费直播动态提醒
亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《将一个函数的输出通过管道传输给另一个函数,并在其基础上使用 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 进行处理》的内容介绍就到此结束,如果有什么疑问或者建议,可以在编程网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341