go语言中的库 golang cli库

知识分享之Golang——精选的组件库、组件列表,各种golang组件都可找到知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录go语言中的库,将其整理出来以文章的形式分享给大家go语言中的库,来进行共同学习 。欢迎大家进行持续关注 。
知识分享系列目前包含Java、Golang、Linux、Docker等等 。
awesome-go 这个组件包含了各种golang中常用的组件,说白了就是一个精选的 Go 框架、库和软件的汇总表 。
我们日常需要寻找各种golang组件时在这个列表中基本都可以快速找到 。
golang命令行库Cobra的使用 写了2次才写完go语言中的库 , 内容很长,翻译了很久,内容来源于Cobra github介绍 。翻译完也更全面go语言中的库的了解了Cobra,功能相当强大完善,各种使用的场景都考虑到了 。另外也扩展了一些其它知识,比如 命令行玩法,Levenshtein distance 等等 。以下是正文go语言中的库:
Cobra提供简单的接口来创建强大的现代化CLI接口,比如git与go工具 。Cobra同时也是一个程序, 用于创建CLI程序
Cobra是建立在结构的命令、参数和标志之上 。
命令代表操作,参数和标志是这些行动的修饰符 。
最好的应用程序就像读取句子 。用户会知道如何使用本机应用程序,因为他们将理解如何使用它 。
比如下面的例子,server 是命令, port 是标志:
在下面的命令,我们告诉Git克隆url地址bare
使用Cobra很简单 。首先,使用 go get 安装最新版本
然后在你项目里引用Cobra
通常基于Cobra的应用程序将遵循下面的组织结构,当然你也可以遵循自己的接口:
在Cobra应用程序中,通常main.go文件非常空洞 。它主要只干一件事:初始化Cobra 。
Cobra提供自己的程序来创建你的程序并且添加你想要的命令 。这是最简单的方式把Cobra添加到你的程序里 。
这里 你能找到相关信息
使用Cobra,需要创建一个空的main.go文件和一个rootCmd文件 。你可以选择在合适的地方添加额外的命令 。
Cobra不需要特殊的构造函数 。简单的就可以创建你的命令 。
理想情况下你把这个放在在 app/cmd/root.go
你会另外定义标志和处理配置init()函数 。
比如 cmd/root.go
你需要在main函数里执行root命令 。
通常main.go文件非常空洞 。它主要只干一件事:初始化Cobra 。
其它的命令通常定义在cmd/目录下的自己文件内
如果你想创建一个version命令 , 你可以创建cmd/version.go文件,并在文件里这么写:
标志提供修饰符控制动作命令如何操作
当标志定义好了,我们需要定义一个变量来关联标志
'持久'表示每个在那个命令下的命令都将能分配到这个标志 。对于全局标志 , '持久'的标志绑定在root上 。
Cobra默认只在目标命令上解析标志,父命令忽略任何局部标志 。通过打开 Command.TraverseChildrenCobra将会在执行任意目标命令前解析标志
你同样可以通过 viper 绑定标志:
在这个例子中,永久的标记author被 viper 绑定,注意 , 当用户没有给 --author 提供值 , author 不会被赋值 。
标记默认是可选的 , 如果你希望当一个标记没有设置时,命令行报错,你可以标记它为必须的
验证位置参数可以通过Command 的 Args 字段 。
内置下列验证方法
一个设置自定义验证的例子
在下面的例子 , 我们定义了3个命令 。2个在顶级,一个(cmdTimes)是其中一个顶级命令的子命令 。在这个例子里,由于没有给 rootCmd 提供 Run ,单独的root是不能运行的,必须要有子命令 。
我们仅为一个命令定义了标记 。
更多关于flags的文档可以在找到
更完整大型程序的例子, 可以查看Hugo .
当你的程序有子命令时,Cobra 会自动给你程序添加help命令 。当你运行‘app help’ , 会调用help命令 。另外,help同样支持其它输入命令 。例如,你有一个没有任何其它配置的命令叫‘create’,当你调用‘app help create’ Corbra 将会起作用 。
下面的输入是 Cobra 自动生成的 。除了命令和标志的定义,其它不再需要 。
help 就跟其它命令一样,并没有特殊的逻辑或行为 。事实上,你也可以提供你自己help如果你想的话 。
你能为默认的命令 , 提供你自己的help命令或模板 。使用下面的方法:
后2个也将适用于任何子命令
当用户提供无效的标记或命令,Cobra 将会返回 用法。
你可能从上面的帮助意识到,默认的帮助将被嵌入到用法里然后作为输出 。
你能提供你自己的用法函数或模板给 Cobra 使用 。
比如帮助,方法和模板都可以重写 。
如果Version字段设置到了根命令,Cobra 会提供了一个顶层 ‘--version’标记 。运行带上‘--version’标记的程序,将会按照模板版本信息 。模板可以通过 cmd.SetVersionTemplate(s string) 方法修改
在命令运行前或运行后,再运行方法非常容易 。PersistentPreRun 和 PreRun 方法将会在 Run 之前执行 。PersistentPostRun 和 PostRun 方法将会在 Run 之后执行 。Persistent*Run 方法会被子命令继承,如果它们自己没有定义的话 。这些方法将按照下面的属性执行:
下面的例子,2个命令都使用了上面的特性 。当子命令执行的时候 , 它将执行根命令的 PersistentPreRun,但不会执行根命令的 PersistentPostRun :
输出:
Cobra 会自动输出建议,当遇到“unknown command”错误时 。这使得当输入错误时,Cobra 的行为类似 git 命令 。例如:
建议会基于注册的子命令自动生成 。使用了 Levenshtein distance 的实现 。每一个注册的命令会匹配2个距离(忽略大小写)来提供建议 。
如果你希望在你的命令里,禁用建议或虚弱字符串的距离,使用:

你可以通过 SuggestFor 来给命令提供明确的名词建议 。这个特性允许当字符串不相近,但是意思与你的命令相近,别切你也不想给该命令设置别名 。比如:
Cobra 可以基于子命令,标记,等生成文档 。以以下格式:
Cobra 可以生成一个bash-completion文件 。如果你给命令添加更多信息 , 这些completions可以非常强大和灵活 。更多介绍在 Bash Completions。
go语言里面实现对数据库的操作,用什么包好尽量不要使用ORM , 简单的数据库交互是会省很多事 。
但是一旦查询语句越来越复杂,关联表越来越多,当你发现正在使用的ORM框架做不到时再换其他框架代价会很大 。为什么有那么多框架?就是没有一个框架能解决所有哪怕是大多数问题 。
建议只使用数据库驱动库,database/sql库,可以完成所有go语言与数据库的交互 。
GO语言(三十二):访问关系型数据库(下)在本节中go语言中的库 , 您将使用 Go 执行 SQL INSERT语句以向数据库添加新行 。
您已经了解了如何使用Query和QueryRow处理返回数据go语言中的库的 SQL 语句 。要执行不返回数据的 SQL 语句,请使用Exec.
1、在albumByID下面,粘贴以下addAlbum函数以在数据库中插入新专辑,然后保存 main.go 。
在此代码中go语言中的库:
(1)用DB.Exec执行INSERT语句 。
Exec接受一条 SQL 语句,后跟 SQL 语句的参数值 。
(2)检查尝试INSERT中的错误 。
(3)使用Result.LastInsertId检索插入的数据库行的 ID。
(4)检查尝试检索 ID 的错误 。
2、更新main以调用新addAlbum函数 。
【go语言中的库 golang cli库】在main函数末尾添加以下代码 。
在新代码中:
(1)调用addAlbum添加新专辑,将要添加的专辑的 ID 分配给albID变量 。
从包含 main.go 目录的命令行中,运行代码 。
恭喜!您刚刚使用 Go 对关系数据库执行了简单的操作 。
本节包含您使用本教程构建的应用程序的代码 。
GO语言(三十):访问关系型数据库(上)本教程介绍了使用 Godatabase/sql及其标准库中的包访问关系数据库的基础知识 。
您将使用的database/sql包包括用于连接数据库、执行事务、取消正在进行的操作等的类型和函数 。
在本教程中,您将创建一个数据库 , 然后编写代码来访问该数据库 。您的示例项目将是有关老式爵士乐唱片的数据存储库 。
首先,为您要编写的代码创建一个文件夹 。
1、打开命令提示符并切换到您的主目录 。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,为您的代码创建一个名为 data-access 的目录 。
3、创建一个模块,您可以在其中管理将在本教程中添加的依赖项 。
运行go mod init命令,为其提供新代码的模块路径 。
此命令创建一个 go.mod 文件,您添加的依赖项将在其中列出以供跟踪 。
注意:在实际开发中,您会指定一个更符合您自己需求的模块路径 。有关更多信息,请参阅一下文章 。
GO语言(二十五):管理依赖项(上)
GO语言(二十六):管理依赖项(中)
GO语言(二十七):管理依赖项(下)
接下来,您将创建一个数据库 。
在此步骤中,您将创建要使用的数据库 。您将使用 DBMS 本身的 CLI 创建数据库和表,以及添加数据 。
您将创建一个数据库,其中包含有关黑胶唱片上的老式爵士乐录音的数据 。
这里的代码使用MySQL CLI,但大多数 DBMS 都有自己的 CLI,具有类似的功能 。
1、打开一个新的命令提示符 。
在命令行,登录到您的 DBMS,如下面的 MySQL 示例所示 。
2、在mysql命令提示符下,创建一个数据库 。
3、切到您刚刚创建的数据库,以便您可以添加表 。
4、在文本编辑器的 data-access 文件夹中,创建一个名为 create-tables.sql 的文件来保存用于添加表的 SQL 脚本 。
将以下 SQL 代码粘贴到文件中,然后保存文件 。
在此 SQL 代码中:
(1)删除名为album表 。首先执行此命令可以让您更轻松地稍后重新运行脚本 。
(2)创建一个album包含四列的表:title、artist和price 。每行的id值由 DBMS 自动创建 。
(3)添加带有值的四行 。
5、在mysql命令提示符下 , 运行您刚刚创建的脚本 。
您将使用以下形式的source命令:
6、在 DBMS 命令提示符处,使用SELECT语句来验证您是否已成功创建包含数据的表 。
接下来,您将编写一些 Go 代码进行连接,以便进行查询 。
现在你已经有了一个包含一些数据的数据库 , 开始你的 Go 代码 。
找到并导入一个数据库驱动程序 , 该驱动程序会将您通过database/sql包中的函数发出的请求转换为数据库可以理解的请求 。
1、在您的浏览器中 , 访问SQLDrivers wiki 页面以识别您可以使用的驱动程序 。
2、使用页面上的列表来识别您将使用的驱动程序 。为了在本教程中访问 MySQL,您将使用 Go-MySQL-Driver 。
3、请注意驱动程序的包名称 - 此处为github.com/go-sql-driver/mysql.
4、使用您的文本编辑器,创建一个用于编写 Go 代码的文件,并将该文件作为 main.go 保存在您之前创建的数据访问目录中 。
5、进入main.go,粘贴以下代码导入驱动包 。
在此代码中:
(1)将您的代码添加到main包中,以便您可以独立执行它 。
(2)导入 MySQL 驱动程序github.com/go-sql-driver/mysql 。
导入驱动程序后,您将开始编写代码以访问数据库 。
现在编写一些 Go 代码,让您使用数据库句柄访问数据库 。
您将使用指向结构的指针sql.DB,它表示对特定数据库的访问 。
编写代码
1、进入 main.go,在import您刚刚添加的代码下方,粘贴以下 Go 代码以创建数据库句柄 。
在此代码中:
(3)使用 MySQL 驱动程序Config和FormatDSN类型以收集连接属性并将它们格式化为连接字符串的 DSN 。
该Config结构使代码比连接字符串更容易阅读 。
(4)调用sql.Open 初始化db变量,传递 FormatDSN 。
(5)检查来自 的错误sql.Open 。例如,如果您的数据库连接细节格式不正确,它可能会失败 。
为了简化代码,您调用log.Fatal结束执行并将错误打印到控制台 。在生产代码中 , 您会希望以更优雅的方式处理错误 。
(6)调用DB.Ping以确认连接到数据库有效 。在运行时, sql.Open可能不会立即连接 , 具体取决于驱动程序 。您在Ping此处使用以确认 database/sql包可以在需要时连接 。
(7)检查来自Ping的错误,以防连接失败 。
(8)Ping如果连接成功,则打印一条消息 。
文件的顶部现在应该如下所示:
3、保存 main.go 。
1、开始跟踪 MySQL 驱动程序模块作为依赖项 。
使用go get 添加 github.com/go-sql-driver/mysql 模块作为您自己模块的依赖项 。使用点参数表示“获取当前目录中代码的依赖项” 。
2、在命令提示符下,设置Go 程序使用的DBUSER和DBPASS环境变量 。
在 Linux 或 Mac 上:
在 Windows 上:
3、在包含 main.go 的目录中的命令行中,通过键入go run来运行代码 。
连接成功了!
接下来,您将查询一些数据 。
Go语言os标准库常用方法Getwd/Getenv/Chdir1. os.Getwd()函数
原型go语言中的库:func Getwd()(pwd string, err error)
作用go语言中的库:获取当前文件路径
返回:当前文件路径的字符串和一个err信息
示例:
输出:
当前路径: D:ProjectsGomGoLab01
2. os.Getenv()函数
原型:func Getenv(key string) string
作用:获取系统环境变量的值
参数:key - 系统环境变量名
返回:系统环境变量的值
示例:
输出:
环境变量GOPATH的值是: D:/Projects/Go
3. os.Chdir()函数
原型:func Chdir(dir string) error
作用:将当前文件路径改变为目标路径(非真实改变)
参数:dir - 目标路径(即改变之后的路径)
返回:修改成功go语言中的库 , 返回 nilgo语言中的库;修改失败(如:目标路径不存在的情况)go语言中的库,返回错误信息 。
示例一:
输出:
起始路径: D:ProjectsGomGoLab01
修改后的路径: D:ProjectsGoDemo02
示例二:
输出:
起始路径: D:ProjectsGomGoLab01
error: chdir D:ProjectsGoDemo03: The system cannot find the file specified.
注:文件路径,Window 系统下默认是“” , 写在代码中时要用“”或“/”代替 。
go语言中的库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于golang cli库、go语言中的库的信息别忘了在本站进行查找喔 。

    推荐阅读