Go 語言 1.11 版本推出 go module

栏目: Go · 发布时间: 6年前

Go 語言 1.11 版本推出 go module 本篇來聊聊 Go 語言 在 1.11 版本推出的 新功能 ,相信大家也許還不知道此功能是做什麼用的,我們來回顧看看在初學 Go 語言的時候,最令人困擾的就是 GOPATH ,所有的專案都必須要在 GOPATH 底下開發,然而在更久前還沒有 Vendor 時候,兩個專案用不同版本的同一個 Package 就必須要使用多個 GOPATH 來解決,但是隨著 Vendor 在 1.5 版的推出,解決了這問題,所以現在只要把專案放在 GOPATH 底下,剩下的 Package 管理都透過 Vendor 目錄來控管,在很多大型開源專案都可以看到把 Vendor 目錄放入版本控制已經是基本的 Best Practice,而 go module 推出最大功能用來解決 GOPATH 問題,也就是未來開發專案, 隨意讓開發者 clone 專案到任何地方都可以 ,另外也統一個 Package 套件管理,不再需要 Vendor 目錄,底下舉個實際例子來說明。

影片介紹

此影片同步在 Udemy 課程 內,如果有購買課程的朋友們,也可以在 Udemy 上面觀看,如果想學習更多 Go 語言教學,現在可以透過 $1800 價格購買。

傳統 go vendor 管理

先看個例子:
package main

import (
    "fmt"

    "github.com/appleboy/com/random"
)

func main() {
    fmt.Println(random.String(10))
}
將此專案放在 $GOPATH/src/github.com/appleboy/test 這是大家寫專案必定遵守的目錄規則,而 vendor 管理則會從 PackageManagementTools 選擇一套。底下是用 govendor 來當作例子
$ govendor init
$ govendor fetch github.com/appleboy/com/random
最後用 go build 產生 binary
$ go build -v -o main .
如果您不在 GOPATH 裡面工作,就會遇到底下錯誤訊息:
Error: Package "xxxx" not a go package or not in GOPAT
如果換到 Go 1.11 版本的 module 功能就能永久解決此問題

使用 go module

用 go module 解決兩個問題,第一專案內不必再使用 vendor 管理套件,第二開發者可以任意 clone 專案到任何地方,直接下 go build 就可以拿到執行檔了。底下是使用方式
project
--> main.go
--> main_test.go
初始化專案,先啟動 GO111MODULE 變數,在 go 1.11 預設是 auto
$ export GO111MODULE=on
$ go mod init github.com/appleboy/project
可以看到專案會多出一個 go.mod 檔案,用來記錄使用到的套件版本,如果本身已經在使用 vendor 管理,那麼 mod init 會自動將 vendor 紀錄的版本寫入到 go.mod 。接著執行下載
$ go mod download
專案內會多出 go.sum 檔案,其實根本不用執行 go mod download ,只要在專案內下任何 go build|test|install 指令,就會自動將 pkg 下載到 GOPATH/pkg/mod
$ tree ~/go/pkg/mod/github.com/
/Users/mtk10671/git/go/pkg/mod/github.com/
└── appleboy
    └── com@v0.0.0-20180410030638-c0b5901f9622
        ├── LICENSE
        ├── Makefile
        ├── README.md
        ├── array
        │   ├── array.go
        │   └── array_test.go
        ├── convert
        │   ├── convert.go
        │   └── convert_test.go
        ├── file
        │   ├── file.go
        │   └── file_test.go
        ├── random
        │   ├── random.go
        │   └── random_test.go
        └── vendor
            └── vendor.json
目前 go module 還在實驗階段,如果升級套件或下載套件有任何問題,請透過底下指令將 pkg 目錄清空就可以了。
$ go clean -i -x -modcache

心得

由於 go module 的出現,現在所有的開源專案都相繼支援,但是又要相容於 1.10 版本之前 (含 1.10),所以變成要維護 go.modvendor 兩種版本。我個人感覺 go module 解決 GOPATH 問題,不再依賴此環境變數,讓想入門 Go 語言的開發者,可以快速融入開發環境。

程式碼範例


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深度探索C++对象模型

深度探索C++对象模型

斯坦利•B.李普曼 (Stanley B. Lippman) / 侯捷 / 电子工业出版社 / 2012-1 / 69.00元

作者Lippman参与设计了全世界第一套C++编译程序cfront,这本书就是一位伟大的C++编译程序设计者向你阐述他如何处理各种explicit(明确出现于C++程序代码中)和implicit(隐藏于程序代码背后)的C++语意。 本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模......一起来看看 《深度探索C++对象模型》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器