首頁 >後端開發 >Golang >一篇文章教你如何使用Go語言Modules

一篇文章教你如何使用Go語言Modules

Go语言进阶学习
Go语言进阶学习轉載
2023-07-20 15:55:061497瀏覽
前言

#go moudules是Go的一個套件管理工具,官方提供的,還是比較可靠的,最低Go版本要求1.11 。

可以理解為Python的虛擬環境,或是Java的maven,PHP的composer。

其本質解決的問題就是套件管理混亂問題。

反正就是,用就完事了,只有好事,沒有壞事。


設定(不用管)

GO111MODULE=off # 不适用modules功能
GO111MODULE=off #使用molules功能,不会去GOPATH下找依赖包, 1.11+版本默认开启
GO111MODULE=auto:Golang # Golang自己简则是不是使用modules功能

根據上述指令,可以得到結論,在1.11 版本中,預設就是可以使用go modules的,不需要做其他設定。


#

它和傳統的直接go get區別在哪

沒有使用go modules時,我們直接go get 下載的套件,會預設放在%GOPATH%/src##目錄下。

一篇文章教你如何使用Go語言Modules

啟用go modules後,套件都會下載到%GOPATH%/pkg/mod資料夾中。

一篇文章教你如何使用Go語言Modules

並且會帶版本號,基本上會徹底解決依賴問題。


開始使用

建立go.mod檔

go.mod#文件相當於requirement.txt文件,裡面會放一些所需的依賴套件。


開始使用

我建立了一個 #gomod-demo資料夾。

一篇文章教你如何使用Go語言Modules

並且CMD進入此文件夾裡面。

一篇文章教你如何使用Go語言Modules

執行指令#go mod init gomod-demo

後面這個gomod-demo#可以隨便寫,建議跟資料夾名字一樣。

一篇文章教你如何使用Go語言Modules

成功後,資料夾下會多了一個##go.mod#文件,代表成功。

一篇文章教你如何使用Go語言Modules

我用Goland打開這個gomod-demo 資料夾。

一篇文章教你如何使用Go語言Modules#

go.mod檔說明

  1. #module:模組名稱。

  2. require:依賴套件清單以及版本。

  3. exclude:禁止依賴套件清單(僅在目前模組為主模組時生效)。

  4. replace:替換依賴套件清單(僅在目前模組為主模組時生效)。

當然,這些基本我們不需要動,都是透過指令或IDE修改的


簡單使用

例如我需要使用一個xstrings 套件。

github網址:https://github.com/huandu/xstrings#。

需要執行此指令安裝此套件。

一篇文章教你如何使用Go語言Modules

#

执行下载命令。

一篇文章教你如何使用Go語言Modules

go.mod文件会自动添加一个依赖包。

一篇文章教你如何使用Go語言Modules

代码:

package main

import (
    "fmt"
    "github.com/huandu/xstrings"
)

func main() {
    s := "heheh ADSL附近"
    center := xstrings.Count(s, "h")
    fmt.Println(center)
}

go连接Mysql

github文档如下。

一篇文章教你如何使用Go語言Modules

执行下载命令 go get -u github.com/go-sql-driver/mysql

一篇文章教你如何使用Go語言Modules

go.mod文件如下。

一篇文章教你如何使用Go語言Modules

代码:

package main

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
    "time"
)

func main() {
    //s := "heheh ADSL附近"
    //center := xstrings.Count(s, "h")
    //fmt.Println(center)
    db, err := sql.Open("mysql", "user:password@/dbname")
    if err != nil {
        panic(err)
}
    // See "Important settings" section.
    db.SetConnMaxLifetime(time.Minute * 3)
    db.SetMaxOpenConns(10)
    db.SetMaxIdleConns(10)
}

可能出现的异常

如果使用go get 第三方包时,goland无法导入,或者报错,或者没有Go Modules

一篇文章教你如何使用Go語言Modules

项目目录下,使用go mod download下载一下,基本可以解决问题,只要有Go Modules,就代表没问题。

一篇文章教你如何使用Go語言Modules

如果还是没有Go Modules,在Goland中settings->Go->GoModules(vgo)

一篇文章教你如何使用Go語言Modules

go mod所有命令

在当前文件夹下初始化一个新的 module,创建 go.mod 文件:go mod init name
拉取缺少的模块,移除不用的模块:go mod tidy
将依赖复制到 vendor 下:go mod vendor
下载依赖:go mod download
检验依赖:go mod verify
显示模块依赖图:go mod graph
解释为什么需要依赖:go mod why
编辑 go.mod 文件:go eidt
查看命令列表:go mod
查看命令帮助文档:go help mod

以上是一篇文章教你如何使用Go語言Modules的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:Go语言进阶学习。如有侵權,請聯絡admin@php.cn刪除