1. 程式人生 > 其它 >go開發日記001-環境搭建問題

go開發日記001-環境搭建問題

2021.1008

第一個問題就是gopath理解不夠
gopath是golang專案的工作目錄

底下有src 用於存放原始碼檔案,未編譯的go檔案都放在這裡

src原始檔下對.go檔案通過go build & go install之後自動生成bin資料夾 (有則不產生)

pkg目錄是install自動產生的,放編譯以後的包檔案


go的環境變數大多都是和安裝的go目錄有關的,
GOROOT:Go的安裝目錄
GOPATH:用於存放Go語言Package的目錄,這個目錄不能在Go的安裝目錄中
GOBIN:Go二進位制檔案存放目錄,寫成%GOROOT%\bin就好 其實也可以是工作目錄的bin
GOOS:作業系統
GOARCH:指定系統環境,i386表示x86,amd64表示x64
PATH:需要將%GOBIN%加在PATH變數的最後,方便在命令列下執行Go

go env可檢視更多相關資訊

第二個問題是.mod檔案的問題

  1.什麼是go.mod

Go.mod是Golang1.11版本新引入的官方包管理工具用於解決之前沒有地方記錄依賴包具體版本的問題,方便依賴包的管理。

Go.mod其實就是一個Modules,關於Modules的官方定義為:

Modules是相關Go包的集合,是原始碼交換和版本控制的單元。go命令直接支援使用Modules,包括記錄和解析對其他模組的依賴性。Modules替換舊的基於GOPATH的方法,來指定使用哪些原始檔。

Modules和傳統的GOPATH不同,不需要包含例如src,bin這樣的子目錄,一個原始碼目錄甚至是空目錄都可以作為Modules,只要其中包含有go.mod檔案。

  2.使用(快速無講解版)

  設定 GO111MODULE = on

  設定go proxy 為七牛雲(可以不換就是映象快慢問題)

  

舉個例子

*\workplace\src\firstproject 是我的工作目錄

GOPATH=*\workPlace  

那麼在工作目錄的src目錄下建立新資料夾

cmd或IDE開啟這個資料夾 在終端執行 go mod init 生成 .mod 檔案,

module ex2

go 1.16

(這個時候還沒有.sum檔案)

.mod檔案是唯一標識這個專案的

編寫一個 main.go裡面引用了

github.com/deckarep/golang-set

然後執行了go mod tidy (拉取缺少模組 移除不需要的模組) 生成 .sum(內容如下

github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ=
github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ=

)

main.go

package main
import (
	"fmt"
	"github.com/deckarep/golang-set"
)


func main() {
	requiredClasses := mapset.NewSet()
	requiredClasses.Add("Cooking")
	requiredClasses.Add("English")
	requiredClasses.Add("Math")
	requiredClasses.Add("Biology")

	electiveClasses := mapset.NewSet()
	electiveClasses.Add("Welding")
	electiveClasses.Add("Music")

	allClasses := requiredClasses.Union(electiveClasses)
	fmt.Println(allClasses) // Cooking, English, Math, Biology, Welding, Music

	fmt.Println(electiveClasses.Contains("Cooking")) //false
	fmt.Println(electiveClasses.Cardinality()) // 3
}

  

(具體作用可以檢視 go help mod 這裡給出一些簡單的指令以及作用)

命令                   (說明) download download modules to local cache(下載依賴包) edit edit go.mod from tools or scripts(編輯go.mod) graph print module requirement graph (列印模組依賴圖) verify initialize new module in current directory(在當前目錄初始化mod) tidy add missing and remove unused modules(拉取缺少的模組,移除不用的模組) vendor make vendored copy of dependencies(將依賴複製到vendor下) verify verify dependencies have expected content (驗證依賴是否正確) why explain why packages or modules are needed(解釋為什麼需要依賴)


需要注意的是如果父資料夾存在.mod檔案則子檔案在mod init 和 mod tidy 的時候會出現$GOPATH/go.mod exists but should not

gopath 如果已經存在.mod檔案則同級的目錄及其子目錄都會出現這樣的情況