天天看點

Golang入門到項目實戰 | golang包管理工具go module

作者:一個熱愛程式設計的通信人

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

Golang入門到項目實戰 | golang包管理工具go module
[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"