cmdopt

package module
v0.13.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 28, 2024 License: MIT Imports: 7 Imported by: 9

README

cmdopt Go license codecov PkgGoDev Go version

cmdopt 命令行选项的增强,可以轻松处理子命令。高度重用 flag 包。

opt := cmdopt.New(...)

// 子命令 build,为一个 flag.FlagSet 实例
build := opt.New("build", "title", "usage", func(f *flag.FlagSet) DoFunc {
    v := f.Bool("v", "false", ...)

    return func(output io.Writer)error{
        if v {
            ...
        } else {
            output.Write([]byte("build"))
        }
    }
})

// 子命令 install
install := opt.New("install", "title", "usage", func(*flag.FlagSet) DoFunc {
    return func(output io.Writer)error{
        output.Write([]byte("install"))
    }
})

版权

本项目采用 MIT 开源授权许可证,完整的授权说明可在 LICENSE 文件中找到。

Documentation

Overview

Package cmdopt 用于创建子命令功能的命令行

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Help added in v0.11.0

func Help(opt *CmdOpt, name, title, usage string)

Help 注册 help 子命令

Types

type CmdOpt

type CmdOpt struct {
	// contains filtered or unexported fields
}

CmdOpt 带子命令的命令行操作

func New

func New(output io.Writer, errorHandling flag.ErrorHandling, usageTemplate string, cmd CommandFunc, notFound func(string) string) *CmdOpt

New 声明带有子命令的命令行处理对象

output 表示命令行信息的输出通道; errorHandling 表示出错时的处理方式; cmd 非子命令的参数设定,可以为空; usageTemplate 命令行的文字说明模板; notFound 表示找不到子命令时需要返回的文字说明,若为空,则采用 usageTemplate 处理后的内容;

usageTemplate 可以包含了以下几个占位符:

  • {{flags}} 参数说明,输出时被参数替换,如果没有可以为空;
  • {{commands}} 子命令说明,输出时被子命令列表替换,如果没有可以为空;

func (*CmdOpt) Command added in v0.10.0

func (opt *CmdOpt) Command(name string) (title, usage string, found bool)

Command 返回指定的命令的说明

func (*CmdOpt) Commands

func (opt *CmdOpt) Commands() []string

Commands 返回所有的子命令

func (*CmdOpt) Exec

func (opt *CmdOpt) Exec(args []string) error

Exec 执行命令行程序

args 参数列表,不包含应用名称,比如 os.Args[1:]。

func (*CmdOpt) New

func (opt *CmdOpt) New(name, title, usage string, cmd CommandFunc)

New 注册一条新的子命令

name 为子命令的名称,必须唯一; cmd 为该条子命令执行的函数体,具体可参考 CommandFunc; usage 为该条子命令的帮助内容。可以包含 {{flags}} 占位符,表示参数信息。

func (*CmdOpt) NewPlain added in v0.13.0

func (opt *CmdOpt) NewPlain(name, title, usage string, exec func(io.Writer, []string) error)

NewPlain 添加自行处理参数的子命令

用户需要在 exec 中自行处理命令行参数,exec 原型如下:

func(output io.Writer, args []string) error

output 即为 CmdOpt.Output,args 为子命令的参数,不包含子命令本身。

name, title 和 usage 参数可参考 CmdOpt.New,唯一不同点是 usage 不会处理 {{flags}} 占位符。

func (*CmdOpt) Output added in v0.7.0

func (opt *CmdOpt) Output() io.Writer

func (*CmdOpt) SetOutput added in v0.11.1

func (opt *CmdOpt) SetOutput(w io.Writer)

SetOutput 设置输出通道

func (*CmdOpt) Usage added in v0.12.0

func (opt *CmdOpt) Usage() string

Usage 整个项目的使用说明内容

基于 New 的 usage 参数,里面的占位符会被真实的内容所覆盖。 每次调用时都根据当前的命令行情况重新生成内容。

type CommandFunc added in v0.10.0

type CommandFunc = func(*flag.FlagSet) DoFunc

CommandFunc 子命令的初始化方法

FlagSet 可用于绑定各个命令行参数; 返回值 DoFunc 表示实际执行的函数;

一般与 DoFunc 组合使用:

func(fs *flag.FlagSet) DoFunc {
    f1 := fs.Bool("f1", true, "usage")
    return func(w io.Writer) error {
        if *f1 { TODO }
    }
}

在 CommandFunc 中初始化 flag 参数,并在其返回函数中作实际处理,这样可以防止大量的全局变量的声明。

如非必要情况,CommandFunc 的 FlagSet 只用于绑定参数,不应该修改其相关配置。

type DoFunc

type DoFunc = func(io.Writer) error

DoFunc 命令行的实际执行方法

io.Writer 用于内容的输出,如果有错误信息应该通过返回值返回。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL