服务计算:Go语言实现selpg
文章目录
1.项目内容
使用Golang开发Linux命令行中的selpg
2.设计说明
2.1引入所需要的包
import (
"bufio"
"fmt"
"io"
"os"
"os/exec"
flag "github.com/spf13/pflag"
)
io,实现了一系列非平台相关的 IO 相关接口和实现,比如提供了对 os 中系统相关的 IO 功能的封装。我们在进行流式读写(比如读写文件)时,通常会用到该包。
os/exec,执行外部命令,它包装了 os.StartProcess 函数以便更容易映射到 stdin 和 stdout,并且利用 pipe 连接 I/O。
bufio,在 io 的基础上提供了缓存功能。在具备了缓存功能后, bufio 可以比较方便地提供 ReadLine 之类的操作。
os,提供了对操作系统功能的非平台相关访问接口。接口为Unix风格。提供的功能包括文件操作、进程管理、信号和用户账号等。
fmt,实现格式化的输入输出操作,其中的 fmt.Printf() 和 fmt.Println() 是开发者使用最为频繁的函数。
pflag,提供命令行参数的规则定义和传入参数解析的功能。绝大部分的 CLI 程序都需要用到这个包。
2.2创立结构体
type sp_args struct {
start_page int //开始页码
end_page int //结束页码
in_filename string // 文件名
page_len int // 每一页的大小
page_type int // 页类型
print_dest string // 打印目的地
}
2.3main函数
func main() {
sa := sp_args{-1, -1, "", 3, 'l', ""} //创建结构体数据
progname = os.Args[0]
process_args(len(os.Args), os.Args, &sa)
process_input(sa)
}
2.4process_args函数
主要是用于处理输入时候的各种错误,比如起始页码是负数,终止页码小于起始页码等情况,增加程序的健壮性。详见代码
2.5process_input函数
用来对文件的内容进行处理,根据后缀参数的类型完成操作。详见代码
3.程序测试
test.txt为准备好的数据文件,内容为数字001-050,每个一行。程序默认3行为一页。
out.txt与error.txt为空白文件
3.1 selpg -s1 -e5 test.txt
把test.txt的前5页内容输出到屏幕
3.2 selpg -s1 -e5 < test.txt
selpg 读取标准输入,而标准输入已被 shell/内核重定向为来自“test.txt”而不是显式命名的文件名参数。输入的前5页被写至屏幕。
3.3 hello | selpg -s1 -e2
hello程序的标准输出被 shell/内核重定向至 selpg 的标准输入。将第 1 页到第 2 页写至 selpg 的标准输出(屏幕)。
3.4 selpg -s1 -e6 -l2 test.txt > out.txt
selpg 将前6页(2行为一页)写至标准输出;标准输出被 shell/内核重定向至“out.txt”。
3.5 selpg -s3 -e5 -l15 test.txt 2>error.txt
selpg 将第 3 页到第 5 页(15行为一页)写至标准输出(屏幕);所有的错误消息被 shell/内核重定向至“error.txt”。请注意:在“2”和“>”之间不能有空格;这是 shell 语法的一部分
3.6 selpg -s3 -e5 -l15 test.txt >out.txt 2>error.txt
selpg 将第 3 页到第 5 页(15行为一页)写至标准输出(标准输出被 shell/内核重定向至“out.txt”);所有的错误消息被 shell/内核重定向至“error.txt”。
4.参考资料
Golang之使用Flag和Pflag
开发Linux命令行实用程序
大佬的博客
最后悄悄给上自己的github