发布go的程序包
介绍
在这篇博客中,我将介绍如何通过github,从创建仓库到开发代码,到发布go的程序包的过程。
创建仓库
要发布go的程序包,首先需要在github上创建一个仓库,用来存放代码和文档。可以在github的网站上创建一个仓库,也可以在本地创建一个仓库,然后推送到github上。以下是两种方法的步骤:
在github上创建仓库
在本地创建仓库
- 在本地创建一个文件夹,用来存放你的仓库,例如
hello
- 进入该文件夹,执行
git init
命令,初始化一个git仓库 - 创建一个README.md文件,用来介绍你仓库的内容和用法,例如:
# hello
A simple hello world package in Go
- 执行
git add README.md
命令,将README.md文件添加到暂存区 - 执行
git commit -m "Initial commit"
命令,将暂存区的文件提交到本地仓库 - 登录github账号,点击右上角的加号,选择New repository
- 在Repository name中输入仓库名,例如
hello
- 在Description中输入仓库的简介,例如
A simple hello world package in Go
- 选择Public或者Private,根据需要,公开或者私有你的仓库
- 点击Create repository,就完成了仓库的创建
- 复制仓库的地址,例如
https://github.com/yourname/hello.git
- 在本地仓库中,执行
git remote add origin https://github.com/yourname/hello.git
命令,将本地仓库和远程仓库关联起来 - 执行
git push -u origin master
命令,将本地仓库的内容推送到远程仓库
开发代码
如果是在github创建的仓库,则需要同步到本地。(用idea的时候都是直接创建项目就可以,goland这个拉代码还在网上找了好久才查到是在这里) 如果是本地新建的仓库则忽略这一步。
go mod init github.com/yourname/hello
模块名应该是仓库的URL,这样可以方便其他人导入和使用你的程序包。模块中应该有一个 go.mod
文件,用来记录你的模块名,版本,依赖等信息。你也可以有一个 go.sum
文件,用来记录你的依赖的校验和,以确保它们的完整性。你可以使用 go mod tidy
命令来自动更新这些文件。
你的程序包的代码应该放在你的仓库的根目录下,或者在一个子目录下,如果你想创建一个子包。你的代码文件应该以 .go
为后缀,且以 package
关键字开头,声明你的包名。你的包名应该简短,有意义,且遵循小写字母和下划线的命名规则。你的包中应该有一个或多个导出的函数,变量,常量,类型等,它们的名字以大写字母开头,且有清晰的注释。你的包中也应该有一个或多个测试文件,以 _test.go
为后缀,且使用 testing
包来编写测试用例。你的测试用例应该以 Test
为前缀,且使用 t *testing.T
作为参数。你可以使用 go test
命令来运行你的测试用例,检查你的代码的正确性和性能。
例如,以下是一个简单的 hello
包的代码,它定义了一个 Hello
函数,用来返回一个问候语:
// Package hello provides a simple greeting
package hello
import "fmt"
// Hello returns a greeting for the named person.
func Hello(name string) string {
// Return a greeting that embeds the name in a message.
message := fmt.Sprintf("Hi, %v. Welcome!", name)
return message
}
以下是一个简单的 hello
包的测试代码,它测试了 Hello
函数的输出:
// Package hello provides a simple greeting
package hello
import "testing"
// TestHello tests the Hello function.
func TestHello(t *testing.T) {
// Define a test case struct
type test struct {
name string
want string
}
// Define a slice of test cases
tests := []test{
{name: "Alice", want: "Hi, Alice. Welcome!"},
{name: "Bob", want: "Hi, Bob. Welcome!"},
{name: "", want: "Hi, . Welcome!"},
}
// Iterate over the test cases
for _, tc := range tests {
// Call the Hello function with the test case name
got := Hello(tc.name)
// Compare the result with the test case want
if got != tc.want {
// Report the error if the result is not what we want
t.Errorf("Hello(%v) = %v; want %v", tc.name, got, tc.want)
}
}
}
发布程序包
在完成程序包的开发后,可以将代码推送到github上,进行程序包发布。使用 git tag
命令来为你的程序包添加一个版本号,遵循[语义化版本]的规则。例如,以下命令为程序包添加了一个 v1.0.0
的版本号:
git tag v1.0.0
使用 git push --tags
命令来将你的版本号推送到github上。
或者在github的网站上创建一个[发布],添加一些发布说明,描述你的程序包的特性和修复。
你也可以在你的仓库中添加一些文件,如 LICENSE
,CONTRIBUTING
,CODE_OF_CONDUCT
等,来说明你的程序包的许可,贡献,行为等规范。
发布完成后,在本地新建一个项目使用 go get
来获取程序包
go get github.com/yourname/hello
使用 go get
获取成功以后,代码应该会自动同步至https://pkg.go.dev。(可能需要稍微等一会儿)
但是去查看会发现没有文档,像是这样。
是因为没有遵循他们所要求的开源协议。我们在仓库里面创建一个开源协议。
创建协议
在github新建一个文件
输入LICENCSE,会提示创建模板
也不知道具体是什么协议,我就直接选了第一个创建了
后面再次打一个tag ,然后再 go get
一次就好了,再等一会就会同步了。