欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言包管理模式示例分析

 更新時間:2023年05月23日 09:03:59   作者:甜點cc  
這篇文章主要為大家介紹了Go語言包管理模式示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

任何一門編程語言都離不開對各種工具包的使用,工具包的管理就顯得異常重要了。Go 的包管理方式是逐漸演進的,本文介紹Go語言的兩種包管理模式。

GOPATH模式引包(不推薦)

在 1.5 版本之前,所有的依賴包都是存放在 GOPATH 下,沒有多版本控制。

go的編譯器會在 $GOPATH/src 下面尋找對應(yīng)的模塊,src 下的每一個目錄都可以對應(yīng)一個模塊,目錄中的目錄也可以是一個模塊

下面展示如何在入口文件main.go 里引入非標(biāo)準(zhǔn)庫model包中的變量

  • 目錄層級如下
├───main
│       main.go
└───model
        utils.go
  • main/main.go 入口文件引入utils里面的Name變量
  • model/utils.go 文件聲明 package model,并定義變量var Name string = "xiao" ,變量必須是大寫,否則報錯name not exported by package model
  • main.go 文件引model包
package main
import (
    "fmt"
    // 引包
  // 省略GOPATH/src, Go編譯的時候會自動在src目錄下尋找
    "go_code/pointer/model"
)
func main() {
    fmt.Println(model.Name) // xiao
}

開啟GO111MODULE后非module項目產(chǎn)生的問題

GO111MODULE=on,并且已經(jīng)設(shè)置GOPATH的條件下,寫的代碼在$GOPATH/src下,我想要使用另一個package里面的內(nèi)容,并且這個package不是標(biāo)準(zhǔn)庫,或者說不在GOROOT里(一般我們不會修改GOROOT中的內(nèi)容),編譯會報錯,如下????

package go_code/pointer/model is not in GOROOT

解決方法一:

設(shè)置GO111MODULE=off

go env -w GO111MODULE=off

設(shè)置完之后, go env查看

然后重新編譯即可

解決方法二

使用go mod , 請看下文介紹??

GO MODULE 模式引包(推薦)

go module 介紹

go modules 是 golang 1.11 新加的特性。

  • 模塊是相關(guān)Go包的集合
  • modules是源代碼交換和版本控制的單元

go命令直接支持使用modules,包括記錄和解析對其他模塊的依賴性。modules替換舊的基于GOPATH的方法來指定在給定構(gòu)建中使用哪些源文件。

GO111MODULE 有三個值:off, on和auto(默認(rèn)值)。

  • GO111MODULE=off,go命令行將不會支持module功能,尋找依賴包的方式將會沿用舊版本那種通過vendor目錄或者GOPATH模式來查找(也就是本文最開始介紹的方式)。
  • GO111MODULE=on,go命令行會使用modules,不會去GOPATH目錄下查找所引用的包。
  • GO111MODULE=auto,默認(rèn)值,go命令行將會根據(jù)當(dāng)前目錄來決定是否啟用module功能。這種情況下可以分為兩種情形:

    • 當(dāng)前目錄在GOPATH/src之外且該目錄包含go.mod文件
    • 當(dāng)前文件在包含go.mod文件的目錄下面。

當(dāng)modules功能啟用時,依賴包的存放位置變更為$GOPATH/pkg,允許同一個package多個版本并存,且多個項目可以共享緩存的 module

利用GO111MODULEGOPROXY,可以直接將Github上的第三方庫直接下載到本地使用,不需要使用go get命令。執(zhí)行 go run 運行時,GOMODULES包管理工具會自動幫我們下載github上面的包

使用 go mod 創(chuàng)建新項目

當(dāng)開啟GO111MODULE的時候,才可以使用go mod

1、初始化項目

mkdir test-mod
cd test-moe
go mod init maze-mod

在項目根目錄生成 go.mod 文件

module test-mod
go 1.17
require github.com/astaxie/beego v1.12.1
require (
    golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect
    golang.org/x/text v0.3.0 // indirect
)

注意:

indirect注釋的代表間接依賴,沒有的代表直接依賴,

前面是版本號+時間戳+hash(如:v0.0.0-20190620200207-3b0461eec859

  • go.mod文件一旦創(chuàng)建后,它的內(nèi)容將會被go toolchain全面掌控。go toolchain會在各類命令執(zhí)行時(比如go get、go build、go mod等),修改維護go.mod文件。
  • go.mod 提供了module, require、replace和exclude 四個命令

    • module 語句指定包的名字(路徑)
    • require 語句指定的依賴項模塊
    • replace 語句可以替換依賴項模塊
    • exclude 語句可以忽略依賴項模塊

2、添加依賴

  • 新建main.go文件
  • 執(zhí)行 go run main.go

    • 一般來說 go mod 模式下,運行 go run 會自動安裝所有依賴,但是沒有安裝
    • 運行 go get ./ ... 可以自動查找并下載安裝所有的包
    • 運行 go get package@version 安裝指定版本的依賴包

3、查看依賴

  • go list -m all 查看當(dāng)前模塊所依賴的包列表
  • go mod tidy 從 go.mod 中移除不需要的依賴

4、go.sum文件

用來做包版本管理

go.sum文件與go.mod文件同級。go.sum文件是對導(dǎo)入的依賴包的特定版本的hash校驗值,作用就是記錄第一次下載的依賴版本號,防止有依賴版本升級帶來的不兼容問題。所以,go.modgo.sum文件都需要被加入版本管理中。

總結(jié)

  • GOPATH模式 是 go在 1.5 版本之前的包管理模式,不具備版本控制功能,且所有項目的依賴都放在 GOPATH 里面,管理比較混亂
  • GO MODULE 模式是go在1.11 版本推出的,使用git的管理方式,直接從GitHub上下載所需要的依賴,可能會存在一些安全性問題,同時國內(nèi)需要設(shè)置GOPROXY代理服務(wù)器才可使用,相對來說好用一點。

包管理模式一直是各個開發(fā)語言所面臨的棘手問題,比如NPMYarn,設(shè)計一種完美的包管理模式還需要不斷探索實踐。

以上就是Go語言包管理模式示例分析的詳細內(nèi)容,更多關(guān)于Go語言包管理模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go語言操作redis用法實例

    Go語言操作redis用法實例

    這篇文章主要介紹了Go語言操作redis用法,實例分析了Go語言操作redis的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Golang errors包快速上手

    Golang errors包快速上手

    errors 包是用于處理錯誤的標(biāo)準(zhǔn)庫, errors 包提供的功能比較簡單,使用起來非常方便,下面就來介紹一下,感興趣的可以了解一下
    2025-05-05
  • 如何在Go中將[]byte轉(zhuǎn)換為io.Reader

    如何在Go中將[]byte轉(zhuǎn)換為io.Reader

    本文主要介紹了如何在Go中將[]byte轉(zhuǎn)換為io.Reader,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go實現(xiàn)HTTP請求轉(zhuǎn)發(fā)的示例代碼

    Go實現(xiàn)HTTP請求轉(zhuǎn)發(fā)的示例代碼

    請求轉(zhuǎn)發(fā)是一項核心且常見的功能,本文主要介紹了Go實現(xiàn)HTTP請求轉(zhuǎn)發(fā)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • go?install和go?get的區(qū)別實例詳解

    go?install和go?get的區(qū)別實例詳解

    go install是Golang用來編譯和安裝自定義package的工具,下面這篇文章主要給大家介紹了關(guān)于go?install和go?get區(qū)別的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 詳解Golang中使用map時的注意問題

    詳解Golang中使用map時的注意問題

    Golang中的map是一種數(shù)據(jù)結(jié)構(gòu),它允許你使用鍵值對的形式存儲和訪問數(shù)據(jù),map在Go中是非排序的,提供了高效查找、插入和刪除元素的能力,特別是當(dāng)鍵是不可變類型,本文給大家詳細介紹了Golang中使用map時的注意問題,需要的朋友可以參考下
    2024-06-06
  • Go語言基礎(chǔ)go fmt命令使用示例詳解

    Go語言基礎(chǔ)go fmt命令使用示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)go fmt命令的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • Golang項目在github創(chuàng)建release后自動生成二進制文件的方法

    Golang項目在github創(chuàng)建release后自動生成二進制文件的方法

    這篇文章主要介紹了Golang項目在github創(chuàng)建release后如何自動生成二進制文件,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • go語言檢測文件是否存在的方法

    go語言檢測文件是否存在的方法

    這篇文章主要介紹了go語言檢測文件是否存在的方法,實例分析了Go語言文件操作的相關(guān)技巧,需要的朋友可以參考下
    2015-03-03
  • Go 使用os包操作環(huán)境變量的方法

    Go 使用os包操作環(huán)境變量的方法

    環(huán)境變量通常在程序啟動時就已設(shè)置好,在需要的時候隨時讀取,Go使用簡單的幾個函數(shù)就可以對環(huán)境變量進行增刪查改,本文給大家介紹Go 使用os包操作環(huán)境變量的方法,感興趣的朋友跟隨小編一起看看吧
    2024-07-07

最新評論