如何创建 Go (Golang) 命令行工具

请参考以下文章,了解关于构建环境的方法:
使用 Docker 和 Visual Studio Code 进行 Go (Golang) 开发环境的配置 – Qiita

基本 (jī

首先,我们需要初始化 Golang 项目。

创建一个项目文件夹,并在该文件夹下方执行以下命令:

go mod init <リポジトリーのパス>

他喜欢吃意大利面。

他喜欢吃披萨。

go mod init github.com/yukihiko-shinoda/go-commandline-tool

※ 存储库的路径以后还可以更改。

然后,将创建一个名为 go.mod 的文件。

project/
+---go.mod

接下来,创建一个.go文件
例子:

project/
+---commandline_tool.go
+---go.mod
package main

func main() {
    println("Hello world!")
}

在这种情况下,需要注意以下事项:

package は main とします
コマンドラインツールを実行したときの処理を main() に定義します

将该代码安装为命令行工具
有两种安装方法可供选择

安装

执行 go install 命令时,只需输入 go mod init <存储库路径> 中存储库名称的部分作为命令名称。

$ go install
$ go-commandline-tool
Hello world!

安装 <.go 文件名>

输入 go install 后再输入.go文件名,去除文件名的扩展名部分将成为命令名。

$ go install commandline_tool.go
$ commandline_tool
Hello world!

如果要创建多个命令行工具

由于无法在一个包中定义多个 main(),因此需要将仓库分开或创建子文件夹。

如果要创建子文件夹,则通常需要创建cmd文件夹,并进一步为每个命令创建子文件夹。

project/
+----cmd/
    +----command1/
    |    +----command1.go
    +----command2/
         +----command2.go

顺便提一下,Golang 官方并没有明确推荐的文件夹结构,
尽管没有官方提及 cmd 文件夹,
但许多 Golang 项目似乎遵循以下非官方最佳实践来创建 cmd 文件夹:

参考文献:golang-standards/project-layout:Go项目的标准布局

每个.go文件的package都应该设为main,
而在每个文件中,将命令行执行的处理定义为main()函数。
通过以下命令,可以执行go文件名对应的命令:

$ go install cmd/command1/command1.go
$ go install cmd/command2/command2.go
$ command1
Hello world 1!
$ command2
Hello world 2!

从代码库中安装命令行工具。

以下所述的内容假设您已经具备Git等版本控制系统的知识。关于版本控制系统的基础知识,请参考以下文章:Linux 知识的不需要的Git教程目录| ultra code。

通过将创建的命令行工具推送到版本控制系统中,如Git仓库,同时标记上相应的版本标签,可以随时在安装了Golang的环境中安装命令行工具。

go install <リポジトリーの main パッケージのフォルダーまでのパス>@<バージョンを示すタグ>

如果要安装命令行工具的根包,版本标签为v1.0.0。

go install github.com/yukihiko-shinoda/go-commandline-tool@v1.0.0

若要安装由cmd/command1/command1.go文件实现的命令行工具,并且安装的是标签v1.0.0所表示的版本:

go install github.com/yukihiko-shinoda/go-commandline-tool/cmd/command1@v1.0.0

在这种情况下,命令名称将成为包含定义 main() 的 .go 文件名的父文件夹的名称,而不是 .go 文件名。

将每种安装方法的命令名称整理成一张表格。

根据先前观察到的情况来看,命令名称会根据安装方法的不同而发生变化。总结起来如下:

インストール方法コマンド名ローカルの go.mod を含むフォルダーで go install最初に実行した go mod init <リポジトリーのパス> のリポジトリー名の部分go install <.go ファイル名>.go ファイル名の拡張子を除いた部分の文字列リポジトリーからコマンドラインツールをインストールリポジトリーの main パッケージのフォルダー名

为了使命令名称在开发时和发布时不发生变化的方法是什么?

可以采取以下方法,确保在开发阶段和发布阶段,命令名称保持不变。

在项目根目录下创建命令行工具。

在开发过程中,如果要安装命令行工具进行测试,请使用 go install 命令而不指定文件名。

创建一个子文件夹并创建命令行工具时

创建一个具有相同名称的文件夹和定义 main() 的 .go 文件名。

给我一杯咖啡。

project/
+----cmd/
    +----command1/
    |    +----command1.go
    +----command2/
         +----command2.go
广告
将在 10 秒后关闭
bannerAds