老铁们,大家好,相信还有很多朋友对于Go编程:一分钟实现管道功能和的相关问题不太懂,没关系,今天就由我来为大家分享分享Go编程:一分钟实现管道功能以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
管道是什么
大多数在类Unix系统上输入命令的人都使用过管道功能。所谓管道,就是将程序A的标准输出作为程序B的标准输入。在类Unix系统中,只需要使用|即可。连接A和B程序的符号,即A| B、通过多个管道连接,可以实现非常强大的功能。因此,在类Unix系统上开发命令行程序有一个著名的原则: KISS,意思是Keep It Simple Stupid。
我画了一个简单的图:
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)输入。通过这种方法进行判断时有一个注意事项:
需要确定info.Size(),即标准输入有数据输入。如果终端没有输入,程序将阻塞在ioutil.ReadAll 处。
因此,使用该方法需要了解不同条件设置的目的,并请结合实际开发需求。除了这个方法之外,还有一种更简单的实现方法:
//直接判断标准输入属性是否设置为os.ModeNamedPipe。 if (info.Mode()os.ModeNamedPipe)==os.ModeNamedPipe { //TODO. } 只有有输入时才会设置标准输入。 os.ModeNamedPipe 属性。与第一种方法相比,该方法的代码更加简单。只是NamedPipe有了新的概念,导致理解起来比较困难。介绍一个Linux命令mkfifo,用于创建命名管道。至于为什么这个程序的os.Stdin属性是os.ModeNamedPipe,我只是偷懒而已。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/198317.html
用户评论
心脏偷懒
太赞了!这篇文章讲解得太清楚了,我用 Go 写程序遇到过很多管道的麻烦,终于找到解决方法! 一分钟实现,一点也不夸张!
有13位网友表示赞同!
烟雨萌萌
确实很方便,以前用其他语言实现管道功能可真费劲!这篇博客真是福音啊,Go 果然编程效率高!我现在可以用它来处理一些复杂的流水线任务了!
有19位网友表示赞同!
爱情的过失
go 的管道功能确实简单易用,但实际应用的时候,有时候还需要考虑并发和错误处理等问题,这篇文章只是入门级的讲解吧。希望以后可以分享更深入的内容!
有19位网友表示赞同!
封锁感觉
刚开始接触 Go 语言,这篇文章正好点明了管道 pipe 功能的用法,还举例说明清楚,很易懂!感谢作者!
有7位网友表示赞同!
冷风谷离殇
实现管道功能确实很简单,但是对于初学者来说,理解Go 的并发机制很重要,建议作者可以补充一些关于并发处理pipeline的思路!
有20位网友表示赞同!
各自安好ぃ
感觉一分钟实现管道的介绍有些夸大其词了,至少我理解需要时间去消化和实践才能真正掌握。不过文章写的很好,帮我入门 Go 语言管道功能,值得推荐!
有16位网友表示赞同!
短发
之前一直用 shell 实现管道功能,现在试着用 Go 实现,确实方便很多。这段代码精炼高效,真让人佩服Go 的设计!
有11位网友表示赞同!
怪咖
管道的概念还挺简单的,但实际上调试起来却很蛋疼!希望作者后续可以分享一些遇到问题时的解决技巧!
有9位网友表示赞同!
青墨断笺み
这篇文章介绍了 Go 实现管道 pipe 功能的原理, 对于编程初学者来说, 可以作为参考学习,但是我个人觉得Go 的管道功能还是比较底层的,实际应用中需要结合其他工具和框架才能发挥更大的作用。
有11位网友表示赞同!
ˉ夨落旳尐孩。
Go 语言确实很方便实现管道功能,但有时候实际场景下会遇到多个 goroutine 并发访问同一个管道问题。这篇文章没有涉及到并发安全方面的知识,希望能有所补充!
有7位网友表示赞同!
(り。薆情海
文章讲得不错,将 Go 中 Pipe 的用法简单直观的展示出来了,对于想快速入门Go 管道的同学来说非常实用!
有7位网友表示赞同!
放血
我之前一直以为Go语言没管道的功能,真是太感谢作者的文章帮我解决了疑惑!代码简单易懂,我已经开始尝试学习了!
有12位网友表示赞同!
ヅ她的身影若隐若现
管道虽然方便,但是如果处理的数据量很大可能会造成性能瓶颈,希望作者可以分享一些优化管道的技巧!
有15位网友表示赞同!
最怕挣扎
文章很棒! Go pipe 功能的确很强大,让我节省了很多时间。我本来要写一大堆 shell脚本来实现的功能,现在只需几行代码就能搞定!
有19位网友表示赞同!
执念,爱
觉得“一分钟”这个说法有点夸张,起码对我来说,理解管道功能和完成简单的代码还需要一段时间练习。 但是文章解释很清楚,让我对 Go pipe的功能有了更深的了解。
有6位网友表示赞同!
你的眸中有星辰
Go 的 pipe 功能确实非常强大,简化了数据处理流程,提高了代码的效率。 这篇文章为我学习 Go 提供了一个很好的入门指南!
有7位网友表示赞同!
话扎心
用 Go 实现管道要比使用 shell 更安全可靠,这篇文章让我了解到这个优点,以后我会尽量使用 Go 来实现类似的功能!
有18位网友表示赞同!