Go语言实现CLI命令行
一. 概述
CLI(Command Line Interface)实用程序是Linux下应用开发的基础。正确的编写命令行程序让应用与操作系统融为一体,通过shell或script使得应用获得最大的灵活性与开发效率。Linux提供了cat、ls、copy等命令与操作系统交互;go语言提供一组实用程序完成从编码、编译、库管理、产品发布全过程支持;容器服务如docker、k8s提供了大量实用程序支撑云服务的开发、部署、监控、访问等管理任务;git、npm等都是大家比较熟悉的工具。尽管操作系统与应用系统服务可视化、图形化,但在开发领域,CLI在编程、调试、运维、管理中提供了图形化程序不可替代的灵活性与效率。
二. 具体要求
实现指令的要求请点击这里
三. 实现
1. 引用到的包
import (
"fmt"
"flag"
"os"
"io/ioutil"
"io"
"bufio"
"os/exec"
)
2. 数据结构(指令结构)
type selpg_args struct
{
start_page int //开始操作的页编号
end_page int //结束操作的页编号
in_filename string //读取的文件名
page_len int //读取的文本页的数量
page_type bool //操作的类型,-lNumber指这表明页有固定长度,每页为Nnumber行,-f在输入中寻找换页符,并将其作为页定界符处理。
print_dest string //输出文件名
}
3. main函数
func main(){
var args selpg_args //命令行参数
get_args(&args) //读取命令行参数
check_args(&args) //检查参数是否符合要求
run(&args) //运行该命令
}
4. 获取参数
func get_args(parg *selpg_args) {
flag.IntVar(&(parg.start_page), “s”, -1, “startPage”)
flag.IntVar(&(parg.end_page), “e”, -1, “endPage”)
flag.IntVar(&(parg.page_len), “l”, 72, “pageLength”)
flag.StringVar(&(parg.print_dest), “d”, “”, “printDest”)
flag.BoolVar(&(parg.page_type), “f”, false, “pageType”)
flag.Parse()
args_left := flag.Args()
if(len(args_left) > 0){
parg.in_filename = string(args_left[0])
} else {
parg.in_filename = “”
}
}
flag是go语言用来解析命令行参数的包,具有很强的功能,定义flags有两种方式:
1)flag.Xxx(),其中Xxx可以是Int、String等;返回一个相应类型的指针,如:
var ip = flag.Int("flagname", 1234, "help message for flagname")
2)flag.XxxVar(),将flag绑定到一个变量上,如: