bin

package
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Jun 5, 2019 License: Apache-2.0 Imports: 10 Imported by: 0

README

uymas/bin

命令行生成工具

格式

# 命令解析
$ [command] <option>

# 简单选项
$ <option>

数据格式

# 字符串
$ 'the data string.'	# the data string.
$ "the data string."	# the data string.

# 数字类型
$ 8						# int
$ 8.88					# float

# 数组
# 分割符号(separator)  默认","
$ 'a','b','c','d'		# array [a, b, c, d]
# "," 分割
$ --separator-comma 
$ -spt-c

教程

路由状态分为:命令匹配成功 、空命令状态、自定义函数路由成功状态。

命令行程序可实现 对象式函数式, 同时持:对象式/函数式混合风格

对象式
package main

import (
	"fmt"
	"github.com/conero/uymas/bin"
)
// 命令 test
type Test struct {
	bin.Command
}
// 项目初始化
func (a *Test) Init ()  {
    // 重写方法时必先系统父结构体方法[!!]
    a.Command.Init()
    
    // todo ....
}
// 运行,执行内二级命令分发
func (a *Test) Run ()  {
	fmt.Println("ffff.")
}

// 命令 yang
type Yang struct {
	bin.Command
}


func main() {
	//router := &bin.Router{}
	//bin.Register("test", &Test{})
	//bin.Register("yang", &Yang{})
	//bin.Adapter(router)
	bin.RegisterApps(map[string]interface{}{
		"test": &Test{},
		"yang": &Yang{},
	})
	bin.Run()
}

函数式
package main

import (
	"github.com/conero/uymas/bin"
)


func main() {
	// 项目注册
	bin.RegisterFunc("name", func() {
		fmt.Println(" conero/uymas/bin example with Base.")
	})

	// 未知命令
	bin.UnfindFunc(func(cmd string) {
		fmt.Println(cmd + "unfind(functional)")
	})

	// 空函数
	bin.EmptyFunc(func() {
		fmt.Println("empty(functional)")
	})

	bin.Run()
}

Documentation

Overview

轻量级命令行框架

Index

Constants

View Source
const (
	AppMethodInit   = "Init"
	AppMethodRun    = "Run"
	AppMethodNoSubC = "SubCommandUnfind"
	AppMethodHelp   = "Help"
)

Variables

This section is empty.

Functions

func Adapter

func Adapter(router *Router)

加载路由器为适配器

func Alias added in v0.1.1

func Alias(cmd string, alias ...string)

命令别名集(单个)

func AliasMany added in v0.1.1

func AliasMany(alias map[string][]string)

命令别名集(多个)

func AmendSubC added in v0.4.1

func AmendSubC(subC string) string

修正文件命令

func CallCmdHelp added in v0.2.1

func CallCmdHelp(key string) bool

请求命令行帮助

func EmptyFunc added in v0.5.0

func EmptyFunc(todo func())

空函数命令注册

func FormatQue added in v0.5.0

func FormatQue(que []interface{}, prefs ...string) string

格式化数组字符 用于命令行输出 prefs 为 "" 时默认以数组索引开头;否则默给定的输出

func FormatStr added in v0.4.1

func FormatStr(d string, ss ...[][]string) string

获取字符串格式化 [[k, v]]

func FormatTable added in v0.5.0

func FormatTable(data [][]interface{}, args ...interface{}) string

表格格式化 (data, bool) 是否使用 idx

func Init

func Init(param []string)

建议使用 InjectArgs 代替,后期可能进行优化 命令程序初始化入口,用于开发时非直接编译测试

func InjectArgs added in v0.5.0

func InjectArgs(params ...string)

此方法用于非 os.Args 测试 注入参数

func IsEmptyCmd added in v0.5.0

func IsEmptyCmd() bool

空命令检测

func Register

func Register(name string, cmd interface{})

项目注册(单个)

func RegisterApps

func RegisterApps(data map[string]interface{})

注册多个项目

func RegisterFunc added in v0.4.2

func RegisterFunc(cmd string, todo func())

自定义函数式注册

func Rwd added in v0.3.0

func Rwd() string

获取命令正在运行的代码

func StrParseData added in v0.5.0

func StrParseData(v string) interface{}

app.Data 数据格式化 正则检查并被处理为对应的数据格式 --key='字符串参数 可含空格'/--key="'字符串参数 可含空格'" 去除标点,并且认为是字符串 --key=1,2,45,87,96,52,37 整形数组 解析的格式有: bool, int64, float64, string, []int, []string,[]float64, string

func SubCommand added in v0.1.1

func SubCommand(able bool)

二级命令配置

func UnfindFunc added in v0.5.0

func UnfindFunc(todo func(cmd string))

路由失败时的函数

Types

type ActionInterface

type ActionInterface interface {
}

项目引用

type App

type App struct {
	Data    map[string]interface{} // 格式化数据
	DataRaw map[string]string      // 原始数据,命令行的所有数据解析时都为字符串
	Router  *Router

	Command    string   // 当前的命令
	SubCommand string   // 二级命令
	Setting    []string // 项目设置
	Queue      []string // 命令队列
	// contains filtered or unexported fields
}

全局命令行实例,可通过 GetApp 获取

func GetApp added in v0.1.1

func GetApp() *App

获取命令行 App

func Run

func Run() *App

系统运行

func (*App) Args added in v0.5.0

func (app *App) Args(key string) interface{}

获取数据参数值

func (*App) ArgsRaw added in v0.5.0

func (app *App) ArgsRaw(key string) string

获取,原参数解析值

func (*App) Cwd

func (app *App) Cwd() string

获取当的工作目录

func (*App) HasSetting added in v0.1.1

func (app *App) HasSetting(set string) bool

检测属性是否存在

func (*App) Next added in v0.3.1

func (app *App) Next(keys ...string) string

多简直获取键值

func (*App) PrjName added in v0.1.1

func (app *App) PrjName() string

获取项目名称

func (*App) QueueNext added in v0.1.1

func (app *App) QueueNext(key string) string

队列右邻值

type CmdUitl added in v0.5.0

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

Command 协助方法 通过 cmdInst 与 命令程序解析

func (*CmdUitl) BaseSubCAlias added in v0.5.0

func (cu *CmdUitl) BaseSubCAlias(inst interface{}, alias map[string][]string) *SubCmdAlias

二级命令别名

type Command

type Command struct {
	App  App
	SCA  *SubCmdAlias
	Util *CmdUitl
}

命令结构体

func (*Command) Help added in v0.4.0

func (c *Command) Help()

帮助说明

func (*Command) Init

func (c *Command) Init()

引用初始化接口

func (*Command) InnerDistribute added in v0.2.0

func (c *Command) InnerDistribute()

入口/内部分发(Entrance)

func (*Command) Run

func (c *Command) Run()

运行应用

func (*Command) SubCommandUnfind added in v0.1.1

func (c *Command) SubCommandUnfind(subCmd string)

二级命令应用

type Router

type Router struct {
	// 别名映射组
	Alias          map[string]string
	UnfindAction   func(action string)              // 路由失败
	EmptyAction    func()                           // 路由失败
	FuncAction     func(action string, a *App) bool // 函数式action命名,快速实现
	OptionListener func(opt string, a *App) bool    // 选项监听回调
}

路由器基类

func (*Router) GetAction

func (router *Router) GetAction(action string) string

获取 action参数

type SubCmdAlias added in v0.2.0

type SubCmdAlias struct {
	Alias   map[string][]string
	Matched bool
	Self    interface{}
}

二级命令别名

Jump to

Keyboard shortcuts

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