penggunaan modul go
modul go dilancarkan selepas versi go 1.14
1 Pengenalan kepada penggunaan modul go
go module
ialah Go1 Alat pengurusan versi dilancarkan secara rasmi selepas versi .11, dan bermula dari versi Go1.13, go module
akan menjadi alat pengurusan pergantungan lalai bagi bahasa Go.
1.1 GO111MODULE
Untuk mendayakan sokongan go module
, anda mesti menetapkan pembolehubah persekitaran GO111MODULE
dahulu, yang melaluinya anda boleh menghidupkan atau mematikan sokongan modul Ia mempunyai tiga nilai pilihan: off
, on
, auto
, nilai lalai ialah auto
.
GO111MODULE=off
melumpuhkan sokongan modul dan akan mencari pakej dalam folderGOPATH
danvendor
semasa menyusun.GO111MODULE=on
Dayakan sokongan modul, folderGOPATH
danvendor
akan diabaikan semasa penyusunan, dan hanya kebergantungan akan dimuat turun berdasarkango.mod
dan kebergantungan akan dimuat turun ke direktori%GOPATH%/pkg/mod/
.GO111MODULE=auto
, apabila projek berada di luar$GOPATH/src
dan terdapat failgo.mod
dalam direktori akar projek, sokongan modul didayakan.
Ringkasnya, selepas menetapkan GO111MODULE=on
, anda boleh menggunakan go module
tidak perlu membuat projek dalam GOPATH pada masa hadapan, dan anda juga boleh mengurus kebergantungan projek maklumat pakej pihak ketiga.
Selepas menggunakan modul go untuk mengurus kebergantungan, dua fail go.mod
dan go.sum
akan dijana dalam direktori akar projek.
1.2 Akses Republikan, jadi amat disyorkan agar anda menyediakan GOPROXY Di sini saya syorkan menggunakan goproxy.cn.
Arahan mod 1.3 goexport GOPROXY=https://goproxy.cn
Arahan GOPROXY
yang biasa digunakan adalah seperti berikut: https://proxy.golang.org
go env -w GOPROXY=https://goproxy.cn,direct1.4 go.modgo. fail mod Semua maklumat pergantungan projek direkodkan, dan strukturnya kira-kira seperti berikut:
go mod
go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录) go mod edit 编辑go.mod文件 go mod graph 打印模块依赖图 go mod init 初始化当前文件夹, 创建go.mod文件 go mod tidy 增加缺少的module,删除无用的module go mod vendor 将依赖复制到vendor下 go mod verify 校验依赖 go mod why 解释为什么需要依赖
digunakan untuk mentakrifkan nama pakej
module github.com/Q1mi/studygo/blogger go 1.12 require ( github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586 github.com/gin-gonic/gin v1.4.0 github.com/go-sql-driver/mysql v1.4.1 github.com/jmoiron/sqlx v1.2.0 github.com/satori/go.uuid v1.2.0 google.golang.org/appengine v1.6.1 // indirect )
Digunakan untuk mentakrif pakej dan versi bergantung
- mewakili rujukan tidak langsung
module
- 1.4.1 Versi bergantung
require
go mod menyokong nombor versi semantik, seperti - , anda juga boleh mengikuti cawangan atau teg git, seperti
indirect
, dan sudah tentu anda juga boleh menyerahkan cincangan dengan git, seperti . Mengenai versi pergantungan, format berikut disokong:
go get foo@v1.2.3
Setiap pakej yang mengakses golang.org/x di China perlu memintas tembok api Anda boleh pergi gantikan dalam mod untuk menggantikannya dengan perpustakaan yang sepadan pada github. go get foo@master
go get foo@e3702bed2
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 gopkg.in/vmihailenco/msgpack.v2 v2.9.1 gopkg.in/yaml.v2 <=v2.2.1 github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e latest
Laksanakan perintah
dalam projek untuk memuat turun pakej pergantungan dan anda juga boleh menentukan versi yang dimuat turun.replace ( golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0 )Run
akan menaik taraf kepada versi minor atau semakan terkini (x.y.z, z ialah nombor semakan, y ialah nombor versi minor)
Jalankango get
Ia akan ditingkatkan kepada semakan terkini
- Jalankan
- Ia akan ditingkatkan kepada versi nombor versi yang ditentukan
go get -u
- Jika anda memuat turun semua kebergantungan, anda boleh menggunakan perintah
go get -u=patch
. - 1.6 Menyusun tanggungan
go get package@version
Selepas kami memadamkan kod bergantung dalam kod, perpustakaan bergantung yang berkaitan tidak akan dialih keluar secara automatik daripada fail
untuk mengemas kini kebergantungan dalam go mod download
.
1.7 go mod edit
Pemformatango.mod
go mod tidy
Oleh kerana kita boleh mengubah suai fail go.mod secara manual, kadangkala kita perlu memformat fail. Go menyediakan arahan berikut: go.mod
Tambah kebergantungan
Alih keluar kebergantunganJika anda hanya mahu mengubah suai kandungan dalam failgo mod edit -fmt, maka Anda boleh menjalankan
Contohnya, untuk mengalih keluar pakej
dalamgo mod edit -require=golang.org/x/text, anda boleh menggunakan arahan berikut:
Lebih banyak penggunaan go.mod
boleh dilihat melalui go mod edit -droprequire=package path
. go.mod
golang.org/x/text
1.8 Menggunakan modul go dalam projek
go mod edit -droprequire=golang.org/x/text1.8.1 Projek sedia ada
go mod edit
Jika anda perlu mendayakan go help mod edit
untuk projek sedia ada, anda boleh mengikuti langkah di bawah:
dalam direktori projek untuk menjana fail
.go module
Laksanakan
- untuk merekod versi dan nilai cincang setiap pustaka bergantung.
-
go mod init
go.mod
1.8.2 Projek Baharu - Untuk projek yang baru dibuat, kita boleh mengikuti langkah berikut di bawah folder projek:
go get
- 执行
go mod init 项目名
命令,在当前项目文件夹下创建一个go.mod
文件。 - 手动编辑
go.mod
中的require依赖项或执行go get
自动发现、维护依赖。
二、包和调用文件在同一项目下
例如:
moduledemo ├── go.mod ├── main.go └── mypackage └── mypackage.go // package mp 定义包名为 mp
步骤:
1.在项目下创建一个 go.mod 文件,文件名只能为这个。
2.在 go.mod 文件中添加以下代码
module moduledemo // 设定 moduledemo 为包根目录名,可以随意改变该名字,只需要导入时一致就好 go 1.14 // 表明版本
3.导入想要的包文件
import "moduledemo/mypackage" // 这里是导入包目录下的包文件名
4.使用包文件
mp.MyPackage() // 使用包中的 MyPackage() 函数
三、包和被调用文件不在同一个项目下
例如:
├── moduledemo │ ├── go.mod │ └── main.go └── mypackage ├── go.mod └── mypackage.go // package mp 定义包名为 mp
步骤
1.在 mypackage 下面创建 go.mod 文件,并添加以下代码
module mypackage go 1.14
2.在 moduledemo 下面创建 go.mod 文件,并添加以下代码
module moduledemo go 1.14 require mypackage v0.0.0 // 这个会在你执行 go build 之后自动在该文件添加 replace mypackage => ../mypackage // 指定需要的包目录去后面这个路径中寻找
3.导入和使用
import "mypackage" // 因为该包目录本身就是包文件所以无需添加下一级路径 mp.MyPackage() // 使用包中的 MyPackage() 函数
- 执行