使用urfave/cli实现命令行备忘录

使用urfave/cli实现命令行备忘录

🍕前言

本周抽空了解了一下go的工具包:github.com/urfave/cli还是挺有意思的;

于是就写了一个基于github.com/urfave/cli包的简单命令行备忘录demo;

功能很简单,代码也并不是很复杂,当作入门来看还是很不错的;

当然,学这些工具并不是就是为了去实现一个简单备忘录,在这个学习的过程中能了解到很多新鲜的东西亦能拓宽我们的视野,比如说,知道了黑窗口中各种命令究竟是如何去实现的,为什么go语言适合去制作这种命令行工具,shell脚本如何去实现的,docker,数据库命令,git等等的命令原理,这有助于我们对计算机整体知识和底层的理解;

话不多说,我们进入正题;

🍔urfave/cli入🚪

github.com/urfave/cli包的介绍

github.com/urfave/cli 是一个 Go 语言的命令行应用程序开发包。它提供了一组简单且功能强大的工具,用于构建命令行界面的应用程序,包括解析命令行参数、定义命令和子命令、显示帮助信息等功能。

具体来说,github.com/urfave/cli 包的主要功能包括:

  1. 解析命令行参数: 可以方便地解析命令行中的选项和参数,并将它们映射到相应的数据结构中。
  2. 定义命令和子命令: 可以定义主命令以及其对应的子命令,使得命令行应用程序可以拥有层次结构和多个操作选项。
  3. 显示帮助信息: 自动生成并显示命令行应用程序的帮助信息,包括命令、选项、参数的说明和用法示例等。
  4. 处理命令执行: 可以将函数与特定的命令关联起来,当用户输入相应的命令时,执行相应的函数逻辑。
  5. 处理错误和异常情况: 可以定义自定义的错误处理逻辑,以及处理未知命令和参数错误的方式。
入门程序介绍
package main

import (
	"fmt"
	"log"
	"os"

	"github.com/urfave/cli"
)

func main() {
   
	// 创建一个新的命令行应用程序
	app := cli.NewApp()

	// 设置应用程序的名称、版本和简要描述
	app.Name = "MyCLI"
	app.Version = "1.0.0"
	app.Usage = "A simple command-line application"

	// 定义一个命令
	app.Commands = []cli.Command{
   
		{
   
			Name:    "greet",       //命令触发词:greet
			Aliases: []string{
   "g"},  //简写:g
			Usage:   "Greet someone",
			Action:  greet,
			Flags: []cli.Flag{
   
				cli.StringFlag{
   
					Name:  "name, n",
					Value: "World",
					Usage: "Name of the person to greet",
				},
			},
		},
	}

	// 运行命令行应用程序
	err := app.Run(os.Args)
	if err != nil {
   
		log.Fatal(err)
	}
}

// greet 函数用于执行 greet 命令的逻辑
func greet(c *cli.Context) error {
   
	name := c.String("name")
	fmt.Printf("Hello, %s!\n", name)
	return nil
}

这段代码意思是:

定义了一个名为 “MyCLI” 的命令行应用程序,它包含一个命令 “greet”,用于向某人打招呼。命令 “greet” 可以通过 greetg 触发,并接受一个名为 “name” 的选项,用于指定要打招呼的人的姓名。如果用户没有提供姓名,则默认使用 “World”。

当用户执行命令 ./MyCLI greet 时,默认会输出 “Hello, World!”。如果用户执行命令 ./MyCLI greet --name Alice,则会输出 “Hello, Alice!”。

其实整个cli项目框架就是:

1.初始化命令行程序,定义版本等等信息;

2.定义各种命令(包括触发关键词,命令报错,命令方法的调用等)

3.写各种命令的详细代码实现;

ok;相信你已经对这个包的基础使用已经有了一部分的了解;

现在就引入备忘录工具的实现;

🍟备忘录具体代码讲解

先看项目的分层:

image-20240417160411245

各文件的含义:

  • commands文件存储命令的具体实现代码
  • memo为可执行文件
  • memo.go为项目入口,也包含了命令说明及调用
  • memos.txt存储备忘录中的数据
memo

按照刚刚讲的初始化会放在:memo.go文件中:确实如此:

package main

import (
	"github.com/urfave/cli"
	"log"
	"os"
	"time"
)

// Memo represents a memo item
type Memo struct {
   
	ID         int
	Text       string
	CreatedAt  time.Time
	ModifiedAt time.Time
}
var memos []Memo
var lastID int
func main() {
   
	loadMemos() // 加载备忘录数据
	app := cli.NewApp() //初始化app类型数据
	app.Name = "Memo"
	app.Usage = "A simple command-line memo application"
	app.Version = "1.0.0"
	app.Commands = []cli.Command{
   
		{
   
			Name:    "add",
			Aliases: []string{
   "a"},
			Usage:   "Add a new memo",
			Action:  addMemo,
		},
		{
   
			Name:    "list",
			Aliases: []string{
   "l"},
			Usage:   "List all memos",
			Action:  listMemos,
		},
		{
   
			Name:    "delete",
			Aliases: []string
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值