[go]包和工程管理

1、系統環境變量

GOROOT

指定go的安裝目錄,win是在 C\Go\,Linux在 /usr/local/go下,若是不是默認的目錄,則須要指定 GOROOT環境變量,不然不須要mysql

GOPATH

工做目錄,能夠指定多個,環境變量中用 ; 分割 go get下載目錄的時候默認會下載到第一個GOPATH的src目錄下,找 包也是從第一個目錄開始日後找。能夠指定兩個工做區,第一個用來專門存放下載庫linux

  • src:源代碼文件
  • pkg:編譯的中間文件
  • bin:編譯產生可執行文件

GOOS GOARCH用來設置 編譯產生可執行文件的目標OS和CPU架構

go進行交叉編譯:git

linuxgithub

GOOS=linux GOARCH=amd64 go build hello.go
GOOS=windows GOARCH=amd64 go build hello.go



2、包

一、做用域

包內大寫的:所有包可見redis

包內小寫的:僅僅在本包內可見sql

{}塊做用域:只在塊內可見windows

{
		y:=999
	}
	log.Println(y) //報錯 y不可見

二、包引用

包的全局絕對路徑就是 $GOROOT/src$GOPATH/srcapi

固然也能夠引用相對路徑bash

  • 能夠給包起別名架構

  • import _ "fmt"  //引用而不使用
  • import . "fmt" //引用全部
    func main(){
        Println("ok") //這樣就能夠直接使用包裏面的函數
    }

三、init()

包裏面能夠有 init() 函數,通常用來初始化一些包中要用到的全局變量




3、mod包管理

mod只是版本管理工具, 在go mod初始化的項目目錄下執行go get xxx,會將package下載到$GOPATH/pkg/mod目錄下安裝,而且添加或更新到go.mod文件中

一、相關環境變量

GO111MODULE=off go命令從不使用新模塊支持。使用GOPATH模式(查找vendor目錄和GOPATH路徑下的依賴)
GO111MODULE=on go命令開啓模塊支持,只根據go.mod下載和查找依賴
GO111MODULE=auto 默認值,go命令根據當前目錄啓用或禁用模塊支持。僅噹噹前目錄位於$GOPATH/src以外而且其自己包含go.mod文件或位於包含go.mod文件的目錄下時,才啓用模塊支持。

二、go mod文件結構

module note-gin

go 1.13

require (
	github.com/gin-gonic/gin v1.5.0
	github.com/go-redis/redis v6.15.7+incompatible
	github.com/go-sql-driver/mysql v1.4.1
	github.com/howeyc/fsnotify v0.9.0 // indirect
	github.com/jinzhu/gorm v1.9.12
	github.com/mattn/go-colorable v0.1.6 // indirect
	github.com/onsi/ginkgo v1.12.0 // indirect
	github.com/onsi/gomega v1.9.0 // indirect
	github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a // indirect
	github.com/pilu/fresh v0.0.0-20190826141211-0fa698148017
	github.com/pilu/miniassert v0.0.0-20140522125902-bee63581261a // indirect
	github.com/qiniu/api.v7/v7 v7.4.1
	github.com/robfig/cron v1.2.0
	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
	gopkg.in/yaml.v2 v2.2.4
)
  1. module語句指定包的名字(路徑)

  2. require語句指定的依賴項模塊

  3. replace語句能夠替換依賴項模塊

  4. exclude語句能夠忽略依賴項模塊

module my/thing
require other/thing 	v1.0.2 //須要的模塊
require new/thing 		v2.3.4
exclude old/thing 		v1.2.3 //排除的模塊的某些版本
replace bad/thing 		v1.4.5 	=> good/thing v1.4.5  //替換的模塊

三、相關命令

init

go mod init TestGoMod

在當前目錄下建立一個名爲 TestGoMod的mod文件

module TestGoMod

go 1.13

list

go list -m all  查看全部依賴以及間接模塊當前版本
go list -u -m all 查看全部依賴以及間接依賴當前版本和可升級版本
go list -m -versions github.com/gin-gonic/gin 查看某些模塊的全部版本

get

go get -u ./... 更新全部模塊
go get -u github.com/xxxx  更新指定模塊最新版本

go get github.com/xxxxx  下載模塊依賴

//加上@v1.x.x  能夠獲取指定版本
go get github.com/gin-gonic/gin@v1.3.0
go get github.com/gin-gonic/gin@v1.1.4

build

go build ./...  構建當前項目
go test ./...  構建測試模塊

tidy

架構和構建標記的其餘組合中修剪全部不須要的依賴項,並添加其餘依賴項所需的任何依賴項

go mod tidy
相關文章
相關標籤/搜索