效果

可执行文件example.exe接受三种输入情况,并且都会一步到底执行

  1. example.exe parameter
  2. example.exe
  3. echo xxx | example.exe
第一种情况
import "os"
if len(os.Args)>1{
	os.Args[1] //得到parameter
	//第一种情况process
}
第二三种情况

程序通过os.Stdin读取标准输入,但若始终在开始的时候读取,直接运行example.exe 程序会等待用户去输入,造成不好的效果.

所以先判断是否有来自管道的输入,若无则不再读取标准输入,直接进行下一步操作.

这里链接出国外大佬的解读,和golang中文社区的文档
内容非常透彻,值得一看

import "os"

con,_:=os.Stdin.Stat()
if con.Mode().String()[0]=='p'{
	//第三种情况process,有管道内容途径此处
	//由于con.Size()似乎永远是0,这里用循环读取方式拿到数据
	var buffer=make([]byte,256)
	var cut string
	for {
		n,err:=os.Stdin.Read(buffer[:])
		if err!=nil{
			break
		}
		cut+=string(buffer[:n])
	}
	//cut即为管道内容
	os.Exit(0)
}
//第二种情况process
后话

本文是作者开发netcut时的所学
仅仅给出处理管道和运行时用户输入的办法,项目中完整运用.

如有建议或优化思路,欢迎评论指正或私信
如果本篇文章对你有帮助,请不要吝啬你的点赞。