Agenda

本文介绍了如何使用Cobra库来创建Golang的命令行程序。首先讲解了Cobra库的作用,并展示了安装过程,包括解决依赖问题。接着,通过初始化命令创建程序框架,并演示了添加命令的方法。最后,作者分享了在开发过程中对命令行程序的理解和学习心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Agenda

文章目录

概述

安装Cobra

cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序。因为本次项目是一个命令行程序,所以涉及到读写参数问题,之前是使用pflag来实现参数的读入。但是cobra的使用可以快速生成命令行文件程序,构建一个命令行程序的框架。

首先安装被墙的依赖包。

$GOPATH/src/golang.org/x目录下,若没有则自行创建,用git clone下载sys和text项目:

git clone https://github.com/golang/sys
git clone https://github.com/golang/text

然后执行:

go get -v github.com/spf13/cobra/cobra

若成功安装则在 $GOBIN$GOPATH/bin 下出现cobra可执行程序。
然后在命令行中输入cobra:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cWEKKvcf-1571931179495)(image\cobra安装.jpg)]

出现图中提示信息则安装成功。

创建程序

使用cobra init命令初始化程序框架,但是发现提示错误:

Error: required flag(s) "pkg-name" not set

在查看[官方文档][cobragithub]后发现Cobra版本更新后需要增加一个必须参数--pkg-name,就是main函数默认import的包。

Updates to the Cobra generator have now decoupled it from the GOPATH. As such --pkg-name is required.

于是我们使用如下命令初始化:

  1. 先创建目录进入再初始化,此时不需要[name]参数,即目录
mkdir -p newApp
cd newApp
cobra init --pkg-name github.com/github-user/newApp
  1. 直接创建目录新目录
cobra init --pkg-name github.com/github-user/newApp newApp

初始化成功后出现如下提示信息:

Your Cobra applicaton is ready at <path>

此时项目结构应如下:

agenda/
    cmd/
    main.go
    LICENSE

main.go长这个样子:

package main

import "github.com/github-user/agenda/cmd" //pkg-name

func main() {
  cmd.Execute()
}

cmd文件夹里放的就是我们接下来要添加的命令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTspuo4l-1571931179497)(image\cobra初始化.jpg)]

添加命令

cobra添加命令的指令如下:

cobra add <conmand_name>

于是我们进入刚创建的目录下,执行:

cobra add register
cobra add login

cmd中会自动添加两个go文件:

agenda/
    cmd/
    	register.go
    	login.go
    main.go
    LICENSE

总结

本次作业在难度上比前两次要大很多。本质上来说是实现了一个“翻译”的任务,实现了golang版的selpg。大二操作系统也有写过C语言的命令行程序,所以对CLI也不是一窍不通,不过这一次对管道,重定向有了更深的了解,也简单使用了golang的命令行参数处理包flag和pflag,执行外部指令的exec,还有os和io的一些操作。过程还是比较坎坷,虽然网上参考的博客很多,但是鱼龙混杂,其中很多都有错的或者理解不到位的地方,自己真正会了才可能完整地做出来,否则即使正确的结果也只是简单的摆拍而已。

github地址 -> ?

项目中附测试截图

参考资料

go语言子进程

go语言创建读取写入文件

某博客

某另一博客

开发Linux命令行实用程序

selpg源代码

/home/go-online/go-online-dep/bin/cobra

/home/go-online/go/src/git.go-online.org.cn/tifinity/project7/agenda

/home/go-online/go

[cobragithub][https://github.com/spf13/cobra/tree/master/cobra]
U a t t ( d ) = 1 2 ξ ρ 2 U_{att}(d) = \frac{1}{2}\xi \rho ^2 Uatt(d)=21ξρ2

F a d d ( d ) = − ξ ρ F_{add}(d) = -\xi\rho Fadd(d)=ξρ

U r e p ( d ) = 1 2 η ( 1 ρ − 1 ρ 0 ) 2 U_{rep}(d) = \frac{1}{2}\eta(\frac{1}{\rho} - \frac{1}{\rho_0})^2 Urep(d)=21η(ρ1ρ01)2

F r e p ( d ) = η ( 1 ρ − 1 ρ 0 ) F_{rep}(d) = \eta(\frac{1}{\rho} - \frac{1}{\rho_0}) Frep(d)=η(ρ1ρ01)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值