V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guonaihong
V2EX  ›  程序员

在命令行里面准备起飞--解释来龙去脉

  •  
  •   guonaihong ·
    guonaihong · 2020-05-12 13:12:27 +08:00 · 1160 次点击
    这是一个创建于 1657 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么有 clop

    什么有 clop,先从官方库的弊端说起,现有开源库的现状。clop 要解决的问题。

    官方库的弊端

    • 不支持 posix 风格(最主要原因)
    • 不能直接支持子命令

    go 标准库其实有命令行解析器 flag 。但是他不支持 posix 风格命令行,对于命令行爱好者来说,不支持 posix 风格是相当不友好的。试问可以用cat -nT file 命令读取文件加行号,加行号,显示 tab 符号。用 flag 必须cat -n -T file ,你品,你细品。是不是,flag 开发的 cmd 应用直接没了 posix 那种感觉。当然后还有别的一些弊端,比如没有子命令直接支持等。

    对主流开源命令行工具的思考

    • 现有函数式接口缺点

    go 里面主流命令行解析库,都是函数一把梭,如果代码按行计费,恩,他们赢面挺大。clop 的设计为什么采用 struct 形式。go 里面是强类型语言,相比 js, py 有数据模板--struct,你们写代码是不是经常传递 struct,确实 struct 是我们经常打交道的伙伴,如果用函数形式老大哥 viper 开发 cmd,你要先定义 struct->定义函数--配置一些形为,还要修改 struct 定义的地方。而使用 clop,只要定义 struct 。一看步骤就知道从 2 变成 1,这里面 struct 用法简化了函数式用法的步骤。

    clop 要解决的问题

    • 相比函数式,对复制粘贴友好

    第一点,在对比函数式已经说明了只要定义结构体就行,如果要修改,被绑定的变量和 tag 在一行,怎么改也不容易出错,这就是对修改,和复制粘贴友好的原因,函数式:数据定义和使用隔的有点远,容易修改了 A 忘了修改 B 。

    • posix 风格信徒

    对一些新的 posix 风格也能支持到位

    • 在实战中慢慢打磨 clop

    后面的更新记录,时不时的会放出使用 clop 开发的 posix 命令。满血版本和你机器的 linux 有一样的功能,这次是 cat 命令啦。。。

    clop 地址

    https://github.com/guonaihong/clop

    cat demo

    完备版本 cat 实现

    https://github.com/antlabs/cat

    一个 easy demo

    package main
    
    import (
    	"fmt"
    	"github.com/guonaihong/clop"
    )
    
    type Hello struct {
    	File string `clop:"-f; --file" usage:"file"`
    }
    
    func main() {
    
    	h := Hello{}
    	clop.Bind(&h)
    	fmt.Printf("%#v\n", h)
    }
    // ./one -f test
    // main.Hello{File:"test"}
    // ./one --file test
    // main.Hello{File:"test"}
    
    2 条回复    2020-05-13 13:34:57 +08:00
    paoqi2048
        1
    paoqi2048  
       2020-05-12 20:50:17 +08:00
    这波直接起飞🛫
    guonaihong
        2
    guonaihong  
    OP
       2020-05-13 13:34:57 +08:00
    @paoqi2048 哈哈。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2653 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:56 · PVG 13:56 · LAX 21:56 · JFK 00:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.