• Go Module
  • 关于go.mod
  • 使用go.mod
    • 使用Goland IDE vgo(推荐)
    • 使用命令行
  • 使用GoFrame

    Go Module

    Go Module是从Go版本1.11.1开始官方提供的包管理工具,用于解决Go项目的包管理及依赖,类似于PHP的composer、Nodejs的npm。本章节会对Go Module的一些常用的实用的命令/设置进行介绍,更详细的介绍请查看官方文档:https://github.com/golang/go/wiki/Modules

    关于go.mod

    go.mod是Go项目的依赖描述文件,该文件主要用来描述两个事情:

    1. 当前项目名(module)是什么。每个项目都应该设置一个名称,当前项目中的包(package)可以使用该名称进行相互调用。
    2. 当前项目依赖的第三方包名称。项目运行时会自动分析项目中的代码依赖,生成go.sum依赖分析结果,随后go编译器会去下载这些第三方包,然后再编译运行。

    我们将之前的hello world项目做一些改变,增加一个go.mod文件(也可以在项目根目录下使用 go mod init 项目名称命令初始化项目生成该文件),内容如下:

    1. module my-hello

    其中,my-hello为当前项目的名称,可以随意设置。

    就这样简单便完成了项目的module初始化。

    一般情况下,go.sum依赖分析文件应当被添加到版本管理中随着go.mod文件一起提交。

    使用go.mod

    使用go.mod意即用go.mod进行项目依赖管理。我们有两种go.mod使用方式:IDE-vgo和命令行方式。以下我们通过下载使用GoFrame框架来演示如何使用这两种方式来管理依赖。

    如果需要Goland IDE支持go.mod,必须要打开vgo的支持(包括代码依赖检测)。这两种使用方式的区别仅仅是下载依赖包的方式不同。

    使用Goland IDE vgo(推荐)

    vgo是基于Go Module规范的包管理工具,同官方的go mod命令工具类似。

    1. 设置Goland启用vgo

      Go Module - 图1

      其中Proxy请选择 direct 直连下载依赖包。如果需要有翻墙下载的第三方包,这里请设置反向代理地址如:https://goproxy.io或者https://mirrors.aliyun.com/goproxy/

    2. 手动修改go.mod文件如下:

      1. module my-hello
      2. require github.com/gogf/gf latest

      增加GoFrame框架的依赖,其中latest表示使用最新版本,IDE将会立即去更新下载框架代码。成功后,IDE将会修改go.mod文件并生成go.sum依赖分析文件。

      Go Module - 图2

    3. 随后go.mod文件被自动更新为:

      1. module my-hello
      2. require github.com/gogf/gf v1.6.13

      其中v1.6.13表示vgo检测到的最新框架版本。

    4. 如果下载最新代码框架后出现下图情况:https://www.jetbrains.com/help/go/create-a-project-with-vgo-integration.html

      Go Module - 图3

    5. 请按快捷键 ⌥(option)+↩(return) 或者 鼠标右键, 选择 Sync packages of my-hello

      Go Module - 图4

    6. 随后等待几秒钟之后, 可以看到左侧的Go Module已经有内容,并且中终端自动输出了下载的框架版本

      Go Module - 图5

    使用命令行

    1. 打开Terminal,在项目根目录下执行:

      1. export GO111MODULE=on; go get -u github.com/gogf/gf

      该命令将会立即下载最新的GoFrame框架。其中 export GO111MODULE=on; 表示开启Go Module特性(Go 1.11.x版本默认关闭,需要手动开启)。

      GF框架为开发者解决了所有框架内部的第三方包依赖,因此框架的下载安装非常方便。但是如果您有额外依赖的第三方包被墙下载不了,可以设置环境变量: export GOPROXY=https://goproxy.io 或者 export GOPROXY=https://mirrors.aliyun.com/goproxy/

      Go Module - 图6

    2. 随后go.mod文件内容被自动更新为:

      1. module my-hello
      2. require github.com/gogf/gf v1.6.13 // indirect

      且生成了新的go.sum依赖分析文件,该文件充其量算是一个临时文件,对于我们平时开发工作来说意义不大。

    使用GoFrame

    我们将之前的hello.go修改如下:

    1. package main
    2. import (
    3. "fmt"
    4. "github.com/gogf/gf"
    5. )
    6. func main() {
    7. fmt.Println("hello GF", gf.VERSION)
    8. }

    运行结果如下:

    Go Module - 图7

    可以看到,GoFrame框架已被自动下载成功,并在编译中被正常引入了。

    恭喜,你已经学会了Go Module特性的基本使用了。