CLI 命令行实用程序开发基础

本文档介绍了如何使用Golang开发Linux命令行实用程序selpg,包括环境配置、参数结构体、参数解析、输入输出处理、文件读写等方面,要求遵循Unix命令行规范,使用pflag库,并提供了代码实现和测试方法。
摘要由CSDN通过智能技术生成

服务计算Homework03

  • 项目地址
  • 使用说明:根据博客内容配置好环境后,在对应goPath/src中创建selpg/selpg.go,完成代码后在goPath/src/selpg中执行go build生成selpg文件,即可在当前路径下使用selpg xxx对应命令

目的

使用 golang 开发开发 Linux 命令行实用程序中的 selpg

要求

  • 请按文档使用 selpg 章节要求测试你的程序
  • 请使用 pflag 替代 goflag 以满足 Unix 命令行规范, 参考:Golang之使用Flag和Pflag
  • golang 文件读写、读环境变量,请自己查 os 包
  • “-dXXX” 实现,请自己查 os/exec 库,例如案例Command,管理子进程的标准输入和输出通常使用 io.Pipe,具体案例见Pipe
  • 请自带测试程序,确保函数等功能正确

环境配置

  1. Linux配置go语言环境
  2. 使用命令行apt install golang安装的go语言没有pflag库,手动安装命令为go get github.com/spf13/pflag,安装好后可以直接import

代码实现

  1. 参数结构体selpg_args

将page_type改为bool类型,因为pflag是要识别选项后面跟着的参数的,但-f后面不跟参数,如果用整数类型会报错,而布尔类型的一个特点是不能直接在选项后面跟参数,如果要跟参数,必须用一个等号连接,如selpg -s1 -e2 -f=true,如果出现-f也相当于-f=true,所以如果没有出现-f选项,则page_type为默认值false(对应定长72行数),如果出现-f选项,则page_type设为true(对应不定长行数)。其他与c语言版本相同

type selpg_args struct {
   
        start_page int 
        end_page int
        page_len int
        page_type bool
        in_filename string
        print_dest string
}
  1. 获取参数

由课件可得os、flag包的参数简单处理为:

package main

import (
    "fmt"
    "os"
)

func main() {
   
    for i, a := range os.Args[1:] {
   
        fmt.Printf("Argument %d is %s\n", i+1, a)
    }

}

命令行参数解析FLAG

package main

import (
    "flag" 
    "fmt"
)

func main() {
   
    var port int
    flag.IntVar(&port, "p", 8000, "specify port to use.  defaults to 8000.")
    flag.Parse()

    fmt.Printf("port = %d\n", port)
    fmt.Printf("other args: %+v\n", flag.Args())
}

仿写上述代码获取参数如下

func get_args(sa selpg_args) {
   
	progname = os.Args
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值