笔者近日实现了 selpg 命令,在代码的编写中,多次用到了 io、os、pflag等包中的函数,自己也是第一次接触这些函数,所以写一下自己对于函数的理解和使用
如果在官网上下载 go 并不会有 pflag 包,在运用这个包的时候,需要提前进行导入导入的方法也比较简单,在命令行中输入 go get github.com/spf13/pflag,获取之后就可以在之前的 GOPATH 路径中找到获取的包
相信熟悉 flag 的人有很多,将flag绑定到一个变量上并定义它的类型,就可以获得命令行获得的参数,例如:
package main import ( "flag" "fmt" ) var inputName = flag.String("name", "CHENJIAN", "Input Your Name.") var inputAge = flag.Int("age", 27, "Input Your Age") var inputGender = flag.String("gender", "female", "Input Your Gender") var inputFlagvar int func Init() { flag.IntVar(&inputFlagvar, "flagname", 1234, "Help") } func main() { Init() flag.Parse() // func Args() []string // Args returns the non-flag command-line arguments. // func NArg() int // NArg is the number of arguments remaining after flags have been processed. fmt.Printf("args=%s, num=%d\n", flag.Args(), flag.NArg()) for i := 0; i != flag.NArg(); i++ { fmt.Printf("arg[%d]=%s\n", i, flag.Arg(i)) } fmt.Println("name=", *inputName) fmt.Println("age=", *inputAge) fmt.Println("gender=", *inputGender) fmt.Println("flagname=", inputFlagvar) }上述的Args() 函数是获取非命令行参数的函数,NArg() 是获取该参数个数的函数
pflag 的用法和 flag 的用法几乎相同,只是在其基础上添加了 shorthand 参数,这样在传入参数的时候更加方便,例如:
var ip = flag.IntP("flagname", "f", 1234, "help message") flag.Lookup("flagname").NoOptDefVal = "4321"退出使当前程序以给定的状态代码退出。按照惯例,代码0表示成功,非零表示错误。程序立即终止;延迟函数不运行。
os.Stderr指向标准错误文件描述符的打开文件
os.Stdin指向标准输入文件描述符的打开文件
os.Stat()Stat返回描述文件的FileInfo结构。如果有错误,它的类型将是*PathError。
os.IsNotExist()IsNotExist返回一个布尔值,指示是否已知错误以报告文件或目录不存在。ErrNotExist和一些syscall错误可以满足这个要求。
os.Open()打开打开命名文件以进行读取。如果成功,则可以使用返回文件上的方法进行读取;关联的文件描述符的模式为O\RDONLY。如果有错误,它的类型将是*PathError。
os.File从字面上看,os.File类型代表了操作系统中的文件,但是实际上,它代表的远不止于此。比如对于类Unix的操作系统,包括Linux、macOS、FreeBSD等,其中的一切都可以被看作是文件。 除了文本文件、二进制文件、压缩文件、目录这些常见的形式之外,还有符号链接、各种物理设备(包括内置或外接的面向块或者字符的设备)、命名管道,以及套接字(也就是socket),等等。所以能够利用os.File类型操纵的东西有很多。不过接下来主要介绍os.File类型应用于常规文件。
os.Stdout指向标准输出文件描述符的打开文件
先定义下我的理解,当在Read时,收到一个IO.EOF,代表的就是对端已经关闭了发送的通道,通常来说是发起了FIN。
那么根据自己的实际业务,就可以进行判断,这里的IO.EOF到底该怎么利用,比如说判定为作业结束,直接关闭连接,停止业务。或者等待服务端发送完数据再停止业务都是可以的。
io.WriteCloserWriteCloser 接口组合了基本的 Write 和 Close 方法。
NewReader返回一个新的Reader,这个Reader的大小是默认的大小。