go modules——HelloWorld示例
2024-09-02 11:03:47
go modules——HelloWorld示例
go modules 存在的意义是方便代码的共享(虽然这会使自己开发过程中有一些小小的麻烦)
开发第一步,创建一个github仓库,然后克隆到本地
首先创建一个github仓库
github.com/<username>/hello
,这里我的仓库地址是:github.com/fudute/hello
。然后在本地拉取远程仓库:
git clone https://github.com/fudute/hello.git
cd hello
创建一个module
go mod init github.com/fudute/hello
注意这里的后缀要和github的网址一致
这会在当前目录下创建一个go.mod文件,表示这是一个module。
然后创建一个文件hello.go:
package hello // Hello return "Hello World"
func Hello() string {
return "Hello World!"
}
和测试文件hello_test.go
func TestHello(t *testing.T) {
tests := []struct {
name string
want string
}{
{name: "test", want: "Hello world!"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Hello(); got != tt.want {
t.Errorf("Hello() = %v, want %v", got, tt.want)
}
})
}
}
现在进行测试:
> go test
PASS
ok example.com/hello 0.002s
说明功能没有问题,这时候就可以准备提交了。但是在提交之前,还存在一个版本问题
module的版本问题
版本的命名方式为
vMAJOR.MINOR.PATCH
,有下面这些规则:- 当API发生向后不兼容的修改时,例如删除某个API函数,这时候需要修改MAJOR版本号
- 当API发生向后兼容的修改是,例如添加API函数,这时候需要修改MINOR版本号
- 当API没有发生修改,只是做了bug修复或者优化,这时候需要修改PATCH就可以
- v0版本是不稳定版本,这个阶段可能发生各种修改,是开发时的版本。如果觉得开发的已经足够完善,那么就可以提高到v1版本,表示这是一个相对稳定的版本。
将module push到github上
先提交当前目录下的文件:
git add *
git commit -m "my first module"
需要先给module添加一个版本标记,指定版本为 v0.1.0
git tag v0.1.0
然后push到github上
git push origin v0.1.0
创建另一个项目,使用之前的module
接下来在本地创建一个main module
mkdir main
cd main
go mod init main
创建文件main.go
package main import (
"fmt" "github.com/fudute/hello"
) func main() {
fmt.Println(hello.Hello())
}在这里导入了之前创建的module,路径是
github.com/fudute/hello
,然后直接运行:> go run .
go: extracting github.com/fudute/hello v0.1.0
Hello World!
可以看到,golang会自动从github上拉取module,然后成功编译运行。
自动下载的module可以在
$GOPATH/pkg/mod
目录下看到。
最新文章
- jQuery系列之操作select标签
- HTML5学习之WebWork多线程处理(八)
- Communication - 03.RILC
- mmc生产运输问题
- 用sinopia搭建npm私服
- 打印从1到k之间的所有素数
- c# 预处理命令
- 雅思创始人Keith Taylor谈英语学习
- Oracle层次查询和with函数的使用
- Python安装httplib2 0.9.2
- js构建函数优秀案例
- maya shell 和 UV shell 的区别
- 深入理解 JS 引擎执行机制(同步执行、异步执行以及同步中的异步执行)
- Autofac创建实例的方法总结
- Swift/Objective-C-Swift与Objective-C混用教程
- csrf_token之全局认证与局部认证
- KMP算法再解 (看毛片算法真是人如其名,哦不,法如其名。)
- 四大组件之Activity——生命周期
- 1.GCC编译过程
- [HDU1512]Monkey King(左偏树)
热门文章
- 前端知识(一)03 初识 ECMAScript 6-谷粒学院
- Linq.Expressions扩展ExpressionExtension
- 处理 K8S Orphaned pod found - but volume paths are still present on disk 孤儿pod
- vue3.0 composition API
- 简单监控liunx中cpu、内存、磁盘及发送邮件参考
- VMware中安装Ubuntu后,安装VMwareTools提示“Not enough free space to extract VMwareTools-10.3.10-13959562.tar.gz”的解决办法
- Mybatis报错:Could not find resource mybatis-conf.xml
- cookie加密 当浏览器全面禁用三方 Cookie
- Struts 2 学习(一)
- k8s command &; args