最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言包管理模式示例分析

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

正文

任何一門(mén)編程語(yǔ)言都離不開(kāi)對(duì)各種工具包的使用,工具包的管理就顯得異常重要了。Go 的包管理方式是逐漸演進(jìn)的,本文介紹Go語(yǔ)言的兩種包管理模式。

GOPATH模式引包(不推薦)

在 1.5 版本之前,所有的依賴(lài)包都是存放在 GOPATH 下,沒(méi)有多版本控制。

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

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

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

開(kāi)啟GO111MODULE后非module項(xiàng)目產(chǎn)生的問(wèn)題

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

package go_code/pointer/model is not in GOROOT

解決方法一:

設(shè)置GO111MODULE=off

go env -w GO111MODULE=off

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

然后重新編譯即可

解決方法二

使用go mod , 請(qǐng)看下文介紹??

GO MODULE 模式引包(推薦)

go module 介紹

go modules 是 golang 1.11 新加的特性。

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

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

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

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

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

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

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

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

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

1、初始化項(xiàng)目

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

在項(xiàng)目根目錄生成 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注釋的代表間接依賴(lài),沒(méi)有的代表直接依賴(lài),

前面是版本號(hào)+時(shí)間戳+hash(如:v0.0.0-20190620200207-3b0461eec859

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

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

2、添加依賴(lài)

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

    • 一般來(lái)說(shuō) go mod 模式下,運(yùn)行 go run 會(huì)自動(dòng)安裝所有依賴(lài),但是沒(méi)有安裝
    • 運(yùn)行 go get ./ ... 可以自動(dòng)查找并下載安裝所有的包
    • 運(yùn)行 go get package@version 安裝指定版本的依賴(lài)包

3、查看依賴(lài)

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

4、go.sum文件

用來(lái)做包版本管理

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

總結(jié)

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

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

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

相關(guān)文章

  • golang控制結(jié)構(gòu)select機(jī)制及使用示例詳解

    golang控制結(jié)構(gòu)select機(jī)制及使用示例詳解

    這篇文章主要介紹了golang控制結(jié)構(gòu)select機(jī)制及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • golang json數(shù)組拼接的實(shí)例

    golang json數(shù)組拼接的實(shí)例

    這篇文章主要介紹了golang json數(shù)組拼接的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • 解決Golang map range遍歷結(jié)果不穩(wěn)定問(wèn)題

    解決Golang map range遍歷結(jié)果不穩(wěn)定問(wèn)題

    這篇文章主要介紹了解決Golang map range遍歷結(jié)果不穩(wěn)定問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言defer語(yǔ)句的三種機(jī)制整理

    Go語(yǔ)言defer語(yǔ)句的三種機(jī)制整理

    在本篇文章里小編給大家分享的是一篇關(guān)于Go語(yǔ)言defer語(yǔ)句的三種機(jī)制整理,需要的朋友們學(xué)習(xí)下吧。
    2020-03-03
  • Golang切片刪除指定元素的三種方法對(duì)比

    Golang切片刪除指定元素的三種方法對(duì)比

    Go語(yǔ)言并沒(méi)有提供用于刪除元素的語(yǔ)法或接口,而是通過(guò)利用切片本身的特性來(lái)刪除元素—追加元素,這篇文章主要給大家介紹了關(guān)于Golang切片刪除指定元素的三種方法,需要的朋友可以參考下
    2022-06-06
  • 一文帶你搞懂Golang如何正確退出Goroutine

    一文帶你搞懂Golang如何正確退出Goroutine

    在Go語(yǔ)言中,Goroutine是一種輕量級(jí)線程,它的退出機(jī)制對(duì)于并發(fā)編程至關(guān)重要,下午就來(lái)介紹幾種Goroutine的退出機(jī)制,希望對(duì)大家有所幫助
    2023-06-06
  • GoLang中的加密方法小結(jié)

    GoLang中的加密方法小結(jié)

    這篇文章主要介紹了GoLang中的加密方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • RoaringBitmap原理及在Go中的使用詳解

    RoaringBitmap原理及在Go中的使用詳解

    這篇文章主要為大家介紹了RoaringBitmap原理及在Go中的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Go語(yǔ)言中配置實(shí)現(xiàn)Logger日志的功能詳解

    Go語(yǔ)言中配置實(shí)現(xiàn)Logger日志的功能詳解

    當(dāng)我們正式開(kāi)發(fā)go程序的時(shí)候,就會(huì)發(fā)現(xiàn)記錄程序日志已經(jīng)不是fmt.print這么簡(jiǎn)單了,所以我們需要專(zhuān)門(mén)的去存儲(chǔ)日志文件,這篇文章主要介紹了在Go語(yǔ)言中配置實(shí)現(xiàn)Logger日志的功能,感興趣的同學(xué)可以參考下文
    2023-05-05
  • Go使用Redis實(shí)現(xiàn)分布式鎖的常見(jiàn)方法

    Go使用Redis實(shí)現(xiàn)分布式鎖的常見(jiàn)方法

    Redis?提供了一些原語(yǔ),可以幫助我們實(shí)現(xiàn)高效的分布式鎖,下邊是使用?Redis?實(shí)現(xiàn)分布式鎖的一種常見(jiàn)方法,通過(guò)代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-11-11

最新評(píng)論

赞皇县| 巴中市| 松原市| 新蔡县| 莆田市| 托克逊县| 蓬溪县| 鄂温| 灵丘县| 丹寨县| 泾源县| 修武县| 韩城市| 金山区| 通州市| 上思县| 和静县| 南京市| 平湖市| 汝阳县| 聂荣县| 永康市| 巧家县| 青阳县| 合江县| 迭部县| 德格县| 石河子市| 通江县| 石首市| 铁岭市| 泽普县| 三穗县| 衢州市| 得荣县| 沂源县| 深圳市| 河曲县| 汕尾市| 板桥市| 临洮县|