Administrator
发布于 2023-11-30 / 122 阅读
0
0

发布go的程序包

发布go的程序包

介绍

在这篇博客中,我将介绍如何通过github,从创建仓库到开发代码,到发布go的程序包的过程。

创建仓库

要发布go的程序包,首先需要在github上创建一个仓库,用来存放代码和文档。可以在github的网站上创建一个仓库,也可以在本地创建一个仓库,然后推送到github上。以下是两种方法的步骤:

在github上创建仓库

image.png

在本地创建仓库

  • 在本地创建一个文件夹,用来存放你的仓库,例如 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这个拉代码还在网上找了好久才查到是在这里) 如果是本地新建的仓库则忽略这一步

image.png

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的网站上创建一个[发布],添加一些发布说明,描述你的程序包的特性和修复。

image.pngimage.png

你也可以在你的仓库中添加一些文件,如 LICENSECONTRIBUTINGCODE_OF_CONDUCT等,来说明你的程序包的许可,贡献,行为等规范。

发布完成后,在本地新建一个项目使用 go get 来获取程序包

go get github.com/yourname/hello

使用 go get获取成功以后,代码应该会自动同步至https://pkg.go.dev。(可能需要稍微等一会儿)

但是去查看会发现没有文档,像是这样。

image.png

是因为没有遵循他们所要求的开源协议。我们在仓库里面创建一个开源协议。

创建协议

在github新建一个文件

image.png输入LICENCSE,会提示创建模板

image.png

也不知道具体是什么协议,我就直接选了第一个创建了
image.png

后面再次打一个tag ,然后再 go get一次就好了,再等一会就会同步了。

image.png


评论