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示例的更多相关文章

  1. torm入门(三)HelloWorld示例

    一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...

  2. Spring Boot 2.x 快速入门(下)HelloWorld示例详解

    上篇 Spring Boot 2.x 快速入门(上)HelloWorld示例 进行了Sprint Boot的快速入门,以实际的示例代码来练手,总比光看书要强很多嘛,最好的就是边看.边写.边记.边展示. ...

  3. Storm入门(三)HelloWorld示例

    一.配置开发环境 storm有两种操作模式: 本地模式和远程模式.使用本地模式的时候,你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来; 用远程模式的时候你提交的t ...

  4. TensorFlow入门,基本介绍,基本概念,计算图,pip安装,helloworld示例,实现简单的神经网络

    TensorFlow入门,基本介绍,基本概念,计算图,pip安装,helloworld示例,实现简单的神经网络

  5. Activiti Workflow HelloWorld 示例与测试环境搭建

    作者:Rock 出处:http://www.ecmkit.com/zh-hans/2012/03/21/activiti-workflow-hell Activiti Workflow HelloWo ...

  6. IDEA+Maven+Spring MVC HelloWorld示例

    用Maven创建Web项目 选择webapp模板 创建成功后点Enable Auto-Import idea给我们创建出来的结构是这样的,这还不标准,需要自己修改. 在main文件夹下创建java文件 ...

  7. Spring Boot 2.x 快速入门(上)HelloWorld示例

    本文重点 最近决定重新实践下Spring Boot的知识体系,因为在项目中遇到的总是根据业务需求走的知识点,并不能覆盖Spring Boot完整的知识体系,甚至没有一个完整的实践去实践某个知识点.最好 ...

  8. CC2650LaunchPad 运行contiki hello-world示例程序

    最近做毕设,开始接触contiki. 下载并运行Instant Contiki 3.0 这是官方制作的虚拟机镜像,直接用vmware等工具就可以运行. 从这里下载. 下载并解压后,用vmware运行. ...

  9. Node.js实战(二)之HelloWorld示例

    经过前面的Node.js实战(一)之概述 想必你应该对Node.js的概念.应用场景.优缺点等有个大致的了解,同时你本地Windows或者Linux上已经准备好了Node.js环境. 下面我们来进入每 ...

随机推荐

  1. canvas星空背景特效+CSS旋转相册学习

    今天在看帖子的时候,看到了个有趣的css旋转相册,刚好之前做了一个星空背景dome,这里给大家分享下代码: 旋转相册参考:https://blog.csdn.net/gitchatxiaomi/art ...

  2. pytest fixtures装饰器的使用

    一.pytest中可以使用@pytest.fixture 装饰器来装饰一个方法,被装饰方法的方法名可以作为一个参数传入到测试方法中.可以使用这种方式来完成测试之前的初始化,也可以返回数据给测试函数. ...

  3. 详解Mybatis拦截器(从使用到源码)

    详解Mybatis拦截器(从使用到源码) MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能. 本文从配置到源码进行分析. 一.拦截器介绍 MyBatis 允许你在 ...

  4. Var_init class

    1 import org.apache.hadoop.conf.Configuration; 2 import org.apache.hadoop.fs.FSDataInputStream; 3 im ...

  5. Azure DevOps Pipelines执行RobotFramework自动化代码

    一.Azure DevOps介绍 1.什么是 Azure DevOps? Azure DevOps其实是VSTS(Visual Studio Team Service)更名后的名字.而VSTS是TFS ...

  6. 客户端必须在它发送到服务器的所有帧中添加掩码(Mask)

    在WebSocket协议中,数据是通过一系列数据帧来进行传输的.为了避免由于网络中介(例如一些拦截代理)或者一些在第10.3节讨论的安全原因,客户端必须在它发送到服务器的所有帧中添加掩码(Mask)( ...

  7. 服务降级 托底预案 Nginx中使用Lua脚本检测CPU使用率,当达到阀值时开启限流,让用户排队

    https://mp.weixin.qq.com/s/FZAcQQAKomGEe95kln1HCQ 在京东我们是如何做服务降级的 https://mp.weixin.qq.com/s/FZAcQQAK ...

  8. shiro的授权与认证

    shiro的授权与认证 package com.cy.pj.common.aspect;import java.lang.reflect.Method;import java.util.Arrays; ...

  9. 后台故障&性能分析常用工具

    说明 本文是一个归纳总结,把常用的一些指令,及它们常用的option简单记录了一下,目的是当我们需要工具去定位问题的时候,能够从中找到合适的工具,具体的用法网上有很多博文了,当然还有man手册.参考了 ...

  10. LOJ10196越狱

    题目描述 原题来自:HNOI 2008 监狱有连续编号为 1 到 n 的 n 个房间,每个房间关押一个犯人.有 m 种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人信仰的宗教相同,就可能发生越狱. ...