• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

服务计算:Go语言实现selpg

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
忽冷忽热的GO语言,究竟是什么路子?发布时间:2022-07-10
下一篇:
go项目工程化构建:package,module发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap