go modules——HelloWorld示例
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目录下看到。
go modules——HelloWorld示例的更多相关文章
- torm入门(三)HelloWorld示例
一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...
- Spring Boot 2.x 快速入门(下)HelloWorld示例详解
上篇 Spring Boot 2.x 快速入门(上)HelloWorld示例 进行了Sprint Boot的快速入门,以实际的示例代码来练手,总比光看书要强很多嘛,最好的就是边看.边写.边记.边展示. ...
- Storm入门(三)HelloWorld示例
一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...
- TensorFlow入门,基本介绍,基本概念,计算图,pip安装,helloworld示例,实现简单的神经网络
TensorFlow入门,基本介绍,基本概念,计算图,pip安装,helloworld示例,实现简单的神经网络
- Activiti Workflow HelloWorld 示例与测试环境搭建
作者:Rock 出处:http://www.ecmkit.com/zh-hans/2012/03/21/activiti-workflow-hell Activiti Workflow HelloWo ...
- IDEA+Maven+Spring MVC HelloWorld示例
用Maven创建Web项目 选择webapp模板 创建成功后点Enable Auto-Import idea给我们创建出来的结构是这样的,这还不标准,需要自己修改. 在main文件夹下创建java文件 ...
- Spring Boot 2.x 快速入门(上)HelloWorld示例
本文重点 最近决定重新实践下Spring Boot的知识体系,因为在项目中遇到的总是根据业务需求走的知识点,并不能覆盖Spring Boot完整的知识体系,甚至没有一个完整的实践去实践某个知识点.最好 ...
- CC2650LaunchPad 运行contiki hello-world示例程序
最近做毕设,开始接触contiki. 下载并运行Instant Contiki 3.0 这是官方制作的虚拟机镜像,直接用vmware等工具就可以运行. 从这里下载. 下载并解压后,用vmware运行. ...
- Node.js实战(二)之HelloWorld示例
经过前面的Node.js实战(一)之概述 想必你应该对Node.js的概念.应用场景.优缺点等有个大致的了解,同时你本地Windows或者Linux上已经准备好了Node.js环境. 下面我们来进入每 ...
随机推荐
- Python爬虫学习笔记(一)
概念: 使用代码模拟用户,批量发送网络请求,批量获取数据. 分类: 通用爬虫: 通用爬虫是搜索引擎(Baidu.Google.Yahoo等)"抓取系统"的重要组成部分. 主要目的是 ...
- 并发编程常用工具类(一) countDownLatch和cyclicBarrier的使用对比
1.CountDownLatch countDownLatch的作用是让一组线程等待其他线程完成工作以后在执行,相当于加强版的join(不懂可以百度一下join的用法),一般在初始 ...
- apk开发环境!多亏这份《秋招+金九银十-腾讯面试题合集》跳槽薪资翻倍!再不刷题就晚了!
开头 最近很多网友反馈:自己从各处弄来的资料,过于杂乱.零散.碎片化,看得时候觉得挺有用的,但过个半天,啥都记不起来了.其实,这就是缺少系统化学习的后果. 为了提高大家的学习效率,帮大家能快速掌握An ...
- 对于两个输入文件,即文件A 和文件B ,请编写MapReduce程序,对两个文件进行合并排除其中重复的内容,得到一个新的输出文件C。
package org.apache.hadoop.examples; import java.util.HashMap; import java.io.IOException; import jav ...
- circus reload
circus reload Configuration - Circus 0.15.0 documentation https://circus.readthedocs.io/en/latest/fo ...
- jsaper子报表Subreport(父子报表互相传值)
有很多人都说Jasperreports不适合中国式复杂报表,实际上运用好父子报表可以解决大部分问题了.例如下面的表.每个学生的学科数目不固定,且每个学生后有相当于小计的平均分.有点复杂度的报表,可以使 ...
- loj10161 叶子的颜色
CQOI 2009 给一棵有 mm 个节点的无根树,你可以选择一个度数大于 11 的节点作为根,然后给一些节点(根.内部节点.叶子均可)着以黑色或白色.你的着色方案应保证根节点到各叶子节点的简单路径上 ...
- redis性能优化、内存分析及优化
redis性能优化.内存分析及优化 1.优化网络延时 2.警惕执行时间长的操作 3.优化数据结构.使用正确的算法 4.考虑操作系统和硬件是否影响性能 5.考虑持久化带来的开销 5.1 RDB 全量持久 ...
- python模块----configpaser (key:value型 配置文件解析器)
configparser是用来读取配置文件的包,配置文件的格式类似:[section]+内容(键=值) 标准库网址:https://docs.python.org/3/library/configpa ...
- 一篇文章图文并茂地带你轻松学完 JavaScript 继承
JavaScript 继承 在阅读本文章之前,已经默认你了解了基础的 JavaScript 语法知识,基础的 ES6 语法知识 . 继承种类 简单的继承种类可以分为 构造函数继承 原型链继承 clas ...