Go module簡介
Go modules是golang 1.11新加的特性,用來管理子產品中包的依賴關系。
Go mod使用方法
- 初始化子產品
Go mod init <項目子產品名稱>
- 依賴關系處理,根據go.mod檔案
Go mod tidy
- 将依賴包複制到項目的vendor目錄
Go mod vendor
如果報被屏蔽(牆),可以使用這個指令,随後使用go build -mod=vendor編譯
- 顯示依賴關系
Go list -m all
- 顯示詳細依賴關系
Go list -m -json all
- 下載下傳依賴
Go mod download [path@version]
[path@version]是非必寫的
執行個體示範
打開終端,在pro02檔案夾下輸入go mode init duo360.com/pro02
PS D:\SynologyDrive\軟體開發\go\golang入門到項目實戰\goproject\360duote.com\pro02> go mod init duo360.com/pro02
go: creating new go.mod: module duo360.com/pro02
go: to add module requirements and sums:
go mod tidy
編輯service/user_service.go
package service
import "fmt"
// code
func TestUserService() {
fmt.Println("test user service...")
}
service目錄執行go build
PS D:\SynologyDrive\軟體開發\go\golang入門到項目實戰\goproject\360duote.com\pro02> cd .\service\
PS D:\SynologyDrive\軟體開發\go\golang入門到項目實戰\goproject\360duote.com\pro02\service> go build
main.go中引入service這個包
package main
import (
"fmt"
"duo360.com/pro02/service"
)
func main() {
fmt.Println("hello world")
service.TestUserService()
}
運作結果
[Running] go run "d:\SynologyDrive\軟體開發\go\golang入門到項目實戰\goproject\360duote.com\pro02\main.go"
hello world
test user service...
編輯customer_service.go
package service
import "fmt"
func TestCustomerService() {
fmt.Println("test customer service...")
}
編輯完後再編譯一次,産生緩存
PS D:\SynologyDrive\軟體開發\go\golang入門到項目實戰\goproject\360duote.com\pro02\service> go build
此時main.go中就可以調用其新增的函數了
package main
import (
"fmt"
"duo360.com/pro02/service"
)
func main() {
fmt.Println("hello world")
service.TestUserService()
service.TestCustomerService()
}
[Running] go run "d:\SynologyDrive\軟體開發\go\golang入門到項目實戰\goproject\360duote.com\pro02\tempCodeRunnerFile.go"
hello world
test user service...
test customer service...
導入遠端包,執行 go get -u github.com/gin-gonic/gin 下載下傳
PS D:\SynologyDrive\軟體開發\go\golang入門到項目實戰\goproject\360duote.com\pro02\service> go get -u github.com/gin-gonic/gin
go: downloading github.com/ugorji/go v1.2.7
go: downloading github.com/ugorji/go/codec v1.2.7
go: downloading golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9
go: downloading golang.org/x/crypto v0.0.0-20220214200702-86341886e292
go get: added github.com/gin-gonic/gin v1.7.7
go get: added github.com/go-playground/validator/v10 v10.10.0
go get: added github.com/golang/protobuf v1.5.2
go get: added github.com/json-iterator/go v1.1.12
go get: added github.com/mattn/go-isatty v0.0.14
go get: added github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go get: added github.com/ugorji/go v1.2.7
go get: added golang.org/x/crypto v0.0.0-20220214200702-86341886e292
go get: added golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9
go get: added golang.org/x/text v0.3.7
go get: added google.golang.org/protobuf v1.27.1
go get: added gopkg.in/yaml.v2 v2.4.0
修改main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
/* fmt.Println("hello world")
service.TestUserService()
service.TestCustomerService() */
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
移動pro02目錄,執行go mod tidy
PS D:\SynologyDrive\軟體開發\go\golang入門到項目實戰\goproject\360duote.com\pro02> go mod tidy
go: downloading github.com/stretchr/testify v1.7.0
go: downloading github.com/google/go-cmp v0.5.5
go: downloading gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
go: downloading github.com/kr/pretty v0.3.0
go: downloading gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
go: downloading github.com/rogpeppe/go-internal v1.8.0
go: downloading github.com/kr/text v0.2.0
運作後通路localhost:8080/ping
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiMGc902byZ2P2EjZhVjYkNDNzgjZ0kDOhZTM1QTN2ETM4MGM5EWY4MzLcBza5QTcsJja2FXLp1ibj1ycvR3Lc5Wanlmcv9CXt92YucWbp9WYpRXdvRnL2A3Lc9CX6MHc0RHaiojIsJye.jpg)
[Running] go run "d:\SynologyDrive\軟體開發\go\golang入門到項目實戰\goproject\360duote.com\pro02\tempCodeRunnerFile.go"
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /ping --> main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2022/03/05 - 20:36:41 | 404 | 0s | ::1 | GET "/"
[GIN] 2022/03/05 - 20:36:41 | 404 | 0s | ::1 | GET "/favicon.ico"
[GIN] 2022/03/05 - 20:36:52 | 200 | 465µs | ::1 | GET "/ping"