Go编程:一分钟实现管道功能

乘着打盹的时间看了一眼前两天写的日期转换的开源工具: ts。发现管道 pipeline 的功能点可以放大一下, 就此记录一下以备将来之需。管道是什么但凡在类 U

老铁们,大家好,相信还有很多朋友对于Go编程:一分钟实现管道功能和的相关问题不太懂,没关系,今天就由我来为大家分享分享Go编程:一分钟实现管道功能以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

管道是什么

大多数在类Unix系统上输入命令的人都使用过管道功能。所谓管道,就是将程序A的标准输出作为程序B的标准输入。在类Unix系统中,只需要使用|即可。连接A和B程序的符号,即A| B、通过多个管道连接,可以实现非常强大的功能。因此,在类Unix系统上开发命令行程序有一个著名的原则: KISS,意思是Keep It Simple Stupid。

我画了一个简单的图:

Go编程:一分钟实现管道功能

Go 程序

在Go程序中实现管道功能极其简单,直接编码即可:

//首先获取程序的标准输入属性信息info, err :=os.Stdin.Stat() if err !=nil { return error.Annotate(err, ‘stdin stat failed’) } //判断标准输入设备属性操作系统。是否设置ModeCharDevice //同时判断是否有数据输入if (info.Mode()os.ModeCharDevice)==os.ModeCharDevice info.Size() 0 { bytes, err :=ioutil.ReadAll(os.Stdin) if错误!=nil { return error.Annotate(err, ‘stdin read failed’) } //TODO. }属性os.ModeCharDevice 表示标准输入的设备类型是Unix 字节流设备(Unix 字符设备),即终端(terminal)输入。通过这种方法进行判断时有一个注意事项:

Go编程:一分钟实现管道功能

需要确定info.Size(),即标准输入有数据输入。如果终端没有输入,程序将阻塞在ioutil.ReadAll 处。

因此,使用该方法需要了解不同条件设置的目的,并请结合实际开发需求。除了这个方法之外,还有一种更简单的实现方法:

//直接判断标准输入属性是否设置为os.ModeNamedPipe。 if (info.Mode()os.ModeNamedPipe)==os.ModeNamedPipe { //TODO. } 只有有输入时才会设置标准输入。 os.ModeNamedPipe 属性。与第一种方法相比,该方法的代码更加简单。只是NamedPipe有了新的概念,导致理解起来比较困难。介绍一个Linux命令mkfifo,用于创建命名管道。至于为什么这个程序的os.Stdin属性是os.ModeNamedPipe,我只是偷懒而已。

Go编程:一分钟实现管道功能

用户评论

Go编程:一分钟实现管道功能
心脏偷懒

太赞了!这篇文章讲解得太清楚了,我用 Go 写程序遇到过很多管道的麻烦,终于找到解决方法! 一分钟实现,一点也不夸张!

    有13位网友表示赞同!

Go编程:一分钟实现管道功能
烟雨萌萌

确实很方便,以前用其他语言实现管道功能可真费劲!这篇博客真是福音啊,Go 果然编程效率高!我现在可以用它来处理一些复杂的流水线任务了!

    有19位网友表示赞同!

Go编程:一分钟实现管道功能
爱情的过失

go 的管道功能确实简单易用,但实际应用的时候,有时候还需要考虑并发和错误处理等问题,这篇文章只是入门级的讲解吧。希望以后可以分享更深入的内容!

    有19位网友表示赞同!

Go编程:一分钟实现管道功能
封锁感觉

刚开始接触 Go 语言,这篇文章正好点明了管道 pipe 功能的用法,还举例说明清楚,很易懂!感谢作者!

    有7位网友表示赞同!

Go编程:一分钟实现管道功能
冷风谷离殇

实现管道功能确实很简单,但是对于初学者来说,理解Go 的并发机制很重要,建议作者可以补充一些关于并发处理pipeline的思路!

    有20位网友表示赞同!

Go编程:一分钟实现管道功能
各自安好ぃ

感觉一分钟实现管道的介绍有些夸大其词了,至少我理解需要时间去消化和实践才能真正掌握。不过文章写的很好,帮我入门 Go 语言管道功能,值得推荐!

    有16位网友表示赞同!

Go编程:一分钟实现管道功能
短发

之前一直用 shell 实现管道功能,现在试着用 Go 实现,确实方便很多。这段代码精炼高效,真让人佩服Go 的设计!

    有11位网友表示赞同!

Go编程:一分钟实现管道功能
怪咖

管道的概念还挺简单的,但实际上调试起来却很蛋疼!希望作者后续可以分享一些遇到问题时的解决技巧!

    有9位网友表示赞同!

Go编程:一分钟实现管道功能
青墨断笺み

这篇文章介绍了 Go 实现管道 pipe 功能的原理, 对于编程初学者来说, 可以作为参考学习,但是我个人觉得Go 的管道功能还是比较底层的,实际应用中需要结合其他工具和框架才能发挥更大的作用。

    有11位网友表示赞同!

Go编程:一分钟实现管道功能
ˉ夨落旳尐孩。

Go 语言确实很方便实现管道功能,但有时候实际场景下会遇到多个 goroutine 并发访问同一个管道问题。这篇文章没有涉及到并发安全方面的知识,希望能有所补充!

    有7位网友表示赞同!

Go编程:一分钟实现管道功能
(り。薆情海

文章讲得不错,将 Go 中 Pipe 的用法简单直观的展示出来了,对于想快速入门Go 管道的同学来说非常实用!

    有7位网友表示赞同!

Go编程:一分钟实现管道功能
放血

我之前一直以为Go语言没管道的功能,真是太感谢作者的文章帮我解决了疑惑!代码简单易懂,我已经开始尝试学习了!

    有12位网友表示赞同!

Go编程:一分钟实现管道功能
ヅ她的身影若隐若现

管道虽然方便,但是如果处理的数据量很大可能会造成性能瓶颈,希望作者可以分享一些优化管道的技巧!

    有15位网友表示赞同!

Go编程:一分钟实现管道功能
最怕挣扎

文章很棒! Go pipe 功能的确很强大,让我节省了很多时间。我本来要写一大堆 shell脚本来实现的功能,现在只需几行代码就能搞定!

    有19位网友表示赞同!

Go编程:一分钟实现管道功能
执念,爱

觉得“一分钟”这个说法有点夸张,起码对我来说,理解管道功能和完成简单的代码还需要一段时间练习。 但是文章解释很清楚,让我对 Go pipe的功能有了更深的了解。

    有6位网友表示赞同!

Go编程:一分钟实现管道功能
你的眸中有星辰

Go 的 pipe 功能确实非常强大,简化了数据处理流程,提高了代码的效率。 这篇文章为我学习 Go 提供了一个很好的入门指南!

    有7位网友表示赞同!

Go编程:一分钟实现管道功能
话扎心

用 Go 实现管道要比使用 shell 更安全可靠,这篇文章让我了解到这个优点,以后我会尽量使用 Go 来实现类似的功能!

    有18位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/198317.html

(0)
小su's avatar小su
上一篇 2024年9月26日 上午12:02
下一篇 2024年9月26日 上午12:04

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注