使用Golang快速构建出命令行应用程序

目录
  • urfave/cli
  • spf13/cobra

在日常开发中,大家对命令行工具(CLI)想必特别熟悉了,如果说你不知道命令工具,那你可能是个假开发。每天都会使用大量的命令行工具,例如最常用的Git、Go、Docker等。

不管是做技术开发还是业务开发,都会有开发命令行程序的场景。例如如果是开发框架,会开发一个命令行工具帮助使用者快速生成项目结构;如果是开发一个定时任务程序,会开发一个命令行工具来启动这个任务。本文就介绍两个专门用来开发命令行应用程序的库。

urfave/cli

urfave/cli是一个简单、快速、有趣的包,专门用于构建命令行应用程序。其目标是使开发人员能够以一种富有表现力的方式编写快速且可分发的命令行应用程序。看一个简单的例子:

package main

import (
	"fmt"
	"log"
	"os"

	"github.com/urfave/cli/v2"
)

funcmain() {
	app := &cli.App{
		Name:  "blog",
		Usage: "显示路多辛blog欢迎语",
		Action: func(*cli.Context)error {
			fmt.Println("欢迎来到路多辛的blog,能帮助到大家是我最大的快乐!")
			returnnil
		},
	}

	if err := app.Run(os.Args); err != nil {
		log.Fatal(err)
	}
}

编译后,执行一下查看帮助命令看下效果

$ ./main -h
NAME:
   blog - 显示路多辛blog欢迎语

USAGE:
   blog [global options] command [command options] [arguments...]

COMMANDS:
   help, h  Shows a list of commands or helpfor one command

GLOBAL OPTIONS:
   --help, -h  show help

执行下blog命令看下效果

$ ./main blog
欢迎来到路多辛的blog,能帮助到大家是我最大的快乐!

更多使用方法可以参考官方文档 https://cli.urfave.org/

spf13/cobra

这个库是Go语言负责人主要参与开发的,很多知名项目的命令行工具都是使用这个库开发的,例如Kubernetes、Istio、Docker、Etcd、GitHubCLI等等。看一个简单的例子:

package main

import (
	"fmt"
	"os"

	"github.com/spf13/cobra"
)

funcmain() {
	Execute()
}

funcExecute() {
	var rootCmd = &cobra.Command{
		Use:   "blog",
		Short: "显示路多辛blog欢迎语",
		Long:  "显示路多辛blog欢迎语,介绍blog的整体情况",
		Run: func(cmd *cobra.Command, args []string) {
			fmt.Println("欢迎来到路多辛的blog,能帮助到大家是我最大的快乐!")
		},
	}
	if err := rootCmd.Execute(); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
}

编译后,执行一下查看帮助命令看下效果:

$./main -h       显示路多辛blog欢迎语,介绍blog的整体情况Usage:blog[flags]Flags:-h,--help   help for blog

执行下blog命令看下效果:

$ ./main blog
欢迎来到路多辛的blog,能帮助到大家是我最大的快乐!

更多使用方法可以参考官方文档

https://github.com/spf13/cobra/blob/main/user_guide.md

到此这篇关于使用Golang快速构建出命令行应用程序的文章就介绍到这了,更多相关Golang命令行应用程序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Golang执行cmd命令行的方法

    1. Golang执行系统命令使用 os/exec Command方法: func Command(name string, arg ...string) *Cmd 第一个参数是命令名称,后面参数可以有多个命令参数. cmd := exec.Command("ls", "-a") if stdout, err := cmd.StdoutPipe(); err != nil {     //获取输出对象,可以从该对象中读取输出结果     log.Fatal(err)

  • Golang命令行进行debug调试操作

    GoLang调试工具Delve 1.先获取呗: go get -u github.com/derekparker/delve/cmd/dlv 2.编写测试代码呗: func main(){ http.HandleFunc("/test",func(writer http.ResponseWriter,req *http.Request){ //TODO }) log.Fatal(http.ListenAndServe("127.0.0.1:8080",nil)) }

  • golang实现命令行程序的使用帮助功能

    通过flag包我们可以很方便的实现命令行程序的参数标志,接下来我们来看看如何实现命令行程序的使用帮助,通常以参数标志-h或--help的形式来使用. 自动生成使用帮助 我们只需要声明其他参数标志,并执行解析,flag包会帮我们自动生成使用帮助. //main.go //输出2个数,输出较大的数 package main import ( "flag" "fmt" "math" ) func main() { firstFlag := flag.F

  • golang 执行命令行的实现

    一般情况下,在 golang 中执行一些命令如 git clone,则可以使用 exec.Command 函数 func RunCommand(path, name string, arg ...string) (msg string, err error) { cmd := exec.Command(name, arg...) cmd.Dir = path err = cmd.Run() log.Println(cmd.Args) if err != nil { log.Println("er

  • Golang操作命令行的几种方式总结

    目录 前言 简单使用 使用Shell执行命令 简单封装Shell执行命令 前言 在实际开发工作中,我们经常使用命令行进行日志分析.程序部署.debug程序等工作.在Linux下,|.grep.find.xagrs.awk等工具是非常强大的,可以很容易的完成各种数据处理.在需求比较简单的情况下,我们会直接命令行:如果再复杂一点,我们会编写简单的Shell脚本:如果业务更加复杂,shell已经不适合进行处理了,我们就会使用我们熟悉的语言进行编码,如果你刚好使用Golang,那么可以使用Golang内

  • Golang中基础的命令行模块urfave/cli的用法说明

    前言 相信只要部署过线上服务,都知道启动参数一定是必不可少的,当你在不同的网络.硬件.软件环境下去启动一个服务的时候,总会有一些启动参数是不确定的,这时候就需要通过命令行模块去解析这些参数,urfave/cli是Golang中一个简单实用的命令行工具. 安装 通过 go get github.com/urfave/cli 命令即可完成安装. 正文 使用了urfave/cli之后,你的程序就会变成一个命令行程序,以下就是通过urfave/cli创建的一个最简单的命令行程序,它设定了一些基础的信息,

  • Golang开发命令行之flag包的使用方法

    目录 1.命令行工具概述 2.flag包介绍 3.flag包命令行参数的定义 4.flag包命令行参数解析 5.flag包命令行帮助 6.flag定义短参数和长参数 7.示例 1.命令行工具概述 日常命令行操作,相对应的众多命令行工具是提高生产力的必备工具,鼠标能够让用户更容易上手,降低用户学习成本. 而对于开发者,键盘操作模式能显著提升生产力,还有在一些专业工具中, 大量使用快捷键代替繁琐的鼠标操作,能够使开发人员更加专注于工作,提高效率,因为键盘操作模式更容易产生肌肉记忆 举个栗子:我司业务

  • K8s部署发布Golang应用程序的实现方法

    目录 创建dockerfile 打包并且推送 创建namespace 创建deployment 创建service 创建ingress 创建hpa alertGo程序可以参考上篇文章,主要用于alertmanager实现钉钉报警 创建dockerfile FROM golang:1.14-alpine ENV GOPROXY=https://goproxy.cn WORKDIR /build COPY . . EXPOSE 8088 RUN mkdir /app RUN go mod tidy

  • 使用Golang快速构建出命令行应用程序

    目录 urfave/cli spf13/cobra 在日常开发中,大家对命令行工具(CLI)想必特别熟悉了,如果说你不知道命令工具,那你可能是个假开发.每天都会使用大量的命令行工具,例如最常用的Git.Go.Docker等. 不管是做技术开发还是业务开发,都会有开发命令行程序的场景.例如如果是开发框架,会开发一个命令行工具帮助使用者快速生成项目结构:如果是开发一个定时任务程序,会开发一个命令行工具来启动这个任务.本文就介绍两个专门用来开发命令行应用程序的库. urfave/cli urfave/

  • 构建 Python 命令行参数的 4 种常见方式

    目录 前言 1. sys.argv 2. argparse 3. getopt 4. click 总结 前言 大家好,在日常编写 Python 脚本的过程中,我们经常需要结合命令行参数传入一些变量参数,使项目使用更加的灵活方便 它们分别是: 内置 sys.argv 模块 内置 argparse 模块 内置 getopt 模块 第三方依赖库 click 1. sys.argv 构建命令行参数最简单.常见的方式是利用内置的「 sys.argv 」模块 它是将参数以一个有序的列表传入,所以在使用时传参

  • Golang实现简易的命令行功能

    目录 前言 开始 flag.String flag.Int flag.StringVar flag.IntVar 定义命令行参数 实现 -f -v 是否强制拷贝 copyFileAction 实现 copyFile 效果图 完整代码 前言 一次偶然的想法,想知道为什么在终端输入那些命令行后,就执行了对应的操作,这转化为代码,应该怎么实现呢? 既然有了问题,那我们就来解决问题吧! 首先我认为想做命令行操作,那就得先”认识“命令行(当然这里指你的代码认识),所以我认位有两个步骤: 解析命令行 实现对

  • C#通过System.CommandLine快速生成支持命令行的应用程序

    一直以来,当我们想让我们的控制台程序支持命令行启动时,往往需要编写大量代码来实现这一看起来很简单的功能.虽然有一些库可以简化一些操作,但整个过程仍然是一个相当枯燥而乏味的过程. 今天,我这里要介绍一个新的命令行库:System.CommandLine,通过他我们可以几乎无需任何额外的编码就可以获得命令行的支持,它能大幅减少程序员花在提供命令行API(CLI)上的时间,改善CLI程序用户的体验,让开发者能专注于编写应用程序. 目前这个库还是预览版本,要体验的话需要可以使用如下库:System.Co

  • 使用Ruby来编写访问Twitter的命令行应用程序的教程

    简介 Twitter 现已成为社交网络中的佼佼者.Twitter 只允许用户发布不多于 140 个字符的内容,谁能够想到,这个过去毫不起眼的小网站如今却价值十多亿美元,拥有数百万用户,Twitter 平台上已构建了大量的应用程序,并且不断有新的开发人员准备投入这一浪潮中. 本文并不打算介绍 Twitter(事实上,也没有这个必要).相反,本文将介绍如何访问 Twitter 平台来构建出色的命令行应用程序.Twitter 支持各种编程语言,包括 C++.Java?.Perl.Ruby.PHP 和

  • Android中使用am命令实现在命令行启动程序详解

    在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am. 复制代码 代码如下: usage: am [subcommand] [options] start an Activity: am start [-D]         -D: enable debugging send a broadcast Intent: am broadcast start an Instrumentation: am instrument [flags]         -r

  • 利用Python内置库实现创建命令行应用程序

    目录 介绍 解析参数 创建帮助信息 添加别名 使用相互排斥的参数 创建一个简单的搜索工具 总结 介绍 当创建一个应用程序时,通常希望能够告诉你的应用程序如何做某事.有两种流行的方法来完成这项任务,你可以让应用程序接受命令行参数,或者创建一个图形化的用户接口.有些应用程序两者都支持. 当你需要在服务器上运行你的代码时,命令行接口很有帮助.大多数服务器没有图形化界面,特别当它们是Linux服务器时.在这种情况下,即使你想运行图形用户界面,你也可能无法运行. Python 有一个叫做 argparse

  • Perl命令行应用程序详解

    perl - Practical Extraction and Report Language,Perl有很多命令行参数,通过它可以让你的程序更简练,并且可以写出很多只有一行命令的perl.在这篇文章里我们来了解一些常用的命令行参数. 命令行调用 复制代码 代码如下: perl [ -sTtuUWX ] [ -hv ] [ -V[:configvar] ] [ -cw ] [ -d[t][:debugger] ] [ -D[number/list] ] [ -pna ] [ -Fpattern

  • Python命令行参数化的四种方式详解

    目录 1. sys.argv 2. argparse 3. getopt 4. click 最后 大家好,在日常编写 Python 脚本的过程中,我们经常需要结合命令行参数传入一些变量参数,使项目使用更加的灵活方便 本篇文章我将罗列出构建 Python 命令行参数的 4 种常见方式 它们分别是: 内置 sys.argv 模块 内置 argparse 模块 内置 getopt 模块 第三方依赖库 click 1. sys.argv 构建命令行参数最简单.常见的方式是利用内置的「 sys.argv

随机推荐