2014年末,我构建了一个名为pymr的工具。最近我觉得有必要学习golang并更新我的ruby知识,所以我决定重新考虑pymr的概念并用多种语言构建它。在这篇文章中,我将分解“mr”(merr)应用程序(pymr、gomr、rumr),并介绍每种语言的具体实现。最后,我将提供一个总体的个人偏好,但将由您来比较各个作品。
应用程序结构
此应用程序的基本思想是,您有一组相关的目录,希望在这些目录上执行单个命令。“mr”工具提供了注册目录的方法,以及在已注册目录组上运行命令的方法。该应用程序具有以下组件:
命令行界面
注册命令(用给定的标记写入文件)
运行命令(在已注册的目录上运行给定的命令)
命令行界面
用于“mr”工具的命令行界面是:
$ pymr --help
Usage: pymr [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
register register a directory
run run a given command in matching...
要比较构建命令行界面,让我们看一下每种语言的register命令。
Python(pymr)
要用Python构建命令行界面,我选择使用Python点击包。
@pymr.command()
@click.option('--directory', '-d', default='./')
@click.option('--tag', '-t', multiple=True)
@click.option('--append', is_flag=True)
def register(directory, tag, append):
...
Ruby(rumr)
在Ruby中构建命令行界面我选择使用thor gem。
desc 'register', 'Register a directory'
method_option :directory,
aliases: '-d',
type: :string,
default: './',
desc: 'Directory to register'
method_option :tag,
aliases: '-t',
type: :array,
default: 'default',
desc: 'Tag/s to register'
method_option :append,
type: :boolean,
desc: 'Append given tags to any existing tags?'
def register
...
Golang(gomr)
在Golang中构建命令行界面我选择使用命令行包装。
app.Commands = []cli.Command{
{
Name: "register",
Usage: "register a directory",
Action: register,
Flags: []cli.Flag{
cli.StringFlag{
Name: "directory, d",
Value: "./",
Usage: "directory to tag",
},
cli.StringFlag{
Name: "tag, t",
Value: "default",
Usage: "tag to add for directory",
},
cli.BoolFlag{
Name: "append",
Usage: "append the tag to an existing registered directory",
},
},
},
}
--append.[py|ru|go]mr.[...]mr