go

Go modules入门体验

2019-10-09  本文已影响0人  喻家山车神

前言

  Go语言的包管理据说一直被人诟病,从1.5版本之后才引入了vendor机制才稍微好一些。不过我刚接触Go的时候由于有大神带路,glide配合着vendor使用起来虽然没有java+maven和PHP+composer来的顺手,但是总体来说也没有被包管理困扰太多。

Go mod历史

  Go语言从1.11版本后开始引入Go modules机制,通过环境变量GO111MODULE来决定使用modules的模式,对应的值有三个:auto/on/off。

Go mod入门

常用命令

命令 说明
go mod init 在当前目录初始化mod
go mod download 下载依赖包
go mod tidy 拉取缺少的模块,移除不用的模块
go mod vendor 将依赖复制到vendor下

使用入门

  使用1.13版本,通过go mod搭建一个echo框架的demo示例。

  1. 主要变量
版本:go version go1.13 windows/amd64
GOPATH=D:\Code\GO
GO111MODULE=auto
  1. 在非$GOPATH/src目录下初始化modules,执行go mod init echo_demo,会在根目录下生成go.mod文件
    命令:
Administrator@WZ MINGW32 /d/Code/GO/echo_demo
$ go mod init echo_demo
go: creating new go.mod: module echo_demo

Administrator@WZ MINGW32 /d/Code/GO/echo_demo
$ ll
total 5
drwxr-xr-x 1 Administrator 197121  0 Oct  9 22:21 .
drwxr-xr-x 1 Administrator 197121  0 Oct  9 22:07 ..
-rw-r--r-- 1 Administrator 197121 26 Oct  9 22:21 go.mod

Administrator@WZ MINGW32 /d/Code/GO/echo_demo

go.mod文件:

module echo_demo

go 1.13
  1. 新建文件main.go,执行go mod tidy,会生成go.sum文件,并下载相关的依赖,下载的依赖代码存在于$GOPATH/pkg/mod目录
    main.go:
package main

import (
    "net/http"
    "github.com/labstack/echo"
)
func main() {
    e := echo.New()
    e.GET("/hello", hello)
    e.GET("/world", world)
    e.Logger.Fatal(e.Start(":8080"))
}

func hello(c echo.Context) error {
    return c.String(http.StatusOK, "Hello!")
}

func world(c echo.Context) error {
    return c.String(http.StatusOK, "World!")
}

命令:

Administrator@WZ MINGW32 /d/Code/GO/echo_demo
$ go mod tidy
go: finding github.com/labstack/echo v3.3.10+incompatible
go: downloading github.com/labstack/echo v3.3.10+incompatible
go: extracting github.com/labstack/echo v3.3.10+incompatible
...省略...

Administrator@WZ MINGW32 /d/Code/GO/echo_demo
$ ll
total 18
drwxr-xr-x 1 Administrator 197121    0 Oct  9 22:31 .
drwxr-xr-x 1 Administrator 197121    0 Oct  9 22:29 ..
drwxr-xr-x 1 Administrator 197121    0 Oct  9 22:28 .idea
-rw-r--r-- 1 Administrator 197121  201 Oct  9 22:31 go.mod
-rw-r--r-- 1 Administrator 197121 3348 Oct  9 22:31 go.sum
-rw-r--r-- 1 Administrator 197121  339 Oct  9 22:28 main.go

Administrator@WZ MINGW32 /d/Code/GO/echo_demo
$ ll $GOPATH/pkg/mod
total 4
drwxr-xr-x 1 Administrator 197121 0 Oct  9 22:31 .
drwxr-xr-x 1 Administrator 197121 0 Sep 25 21:29 ..
drwxr-xr-x 1 Administrator 197121 0 Oct  9 22:32 cache
drwxr-xr-x 1 Administrator 197121 0 Oct  9 22:31 github.com
drwxr-xr-x 1 Administrator 197121 0 Oct  9 22:31 golang.org
drwxr-xr-x 1 Administrator 197121 0 Oct  9 22:31 gopkg.in
  1. 运行demo程序,go run main.go
    请求接口:
Administrator@WZ MINGW32 /bin
$ curl 127.0.0.1:8080/hello
Hello!
Administrator@WZ MINGW32 /bin
$ curl 127.0.0.1:8080/world
World!
  1. 验证一下go mod和go vendor的关系。首先使用go mod vendor下载所有依赖的包到vendor目录下。

备注

  通过go mod机制,开发go语言项目时终于可以不用必须将代码放入$GOPATH/src目录下,避免了之前那种被强迫的感觉。
  另外,真要好好安利下goland这个IDE,开发go的神器,下载vgo插件以后,通过go mod机制建立的项目,各种跳转毫无压力。JetBrains的Idea,phpstorm,goland真是各种爽。

上一篇下一篇

猜你喜欢

热点阅读