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

詳解Go Modules 依賴解決

 更新時間:2026年07月08日 09:42:05   作者:serendipity_hky  
本文主要介紹了Go Modules 依賴解決的實現(xiàn),解決版本控制與GOPATH的痛點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Go Modules是什么?

Go Modules 是 Go 語言的依賴解決方案

Go Modules 目前集成在 Go 的工具鏈中,只要安裝了 Go,自然就可以使用 Go modules,Go modules 解決了 Go1.11 前的幾個常見問題:
(1)Go 語言長久以來的依賴管理問題。
(2)“淘汰”現(xiàn)有的 GOPATH 的使用模式
(3)統(tǒng)一社區(qū)中的其它的依賴管理工具(提供遷移功能)

GOPATH 的工作模式

GOPATH下有三個文件夾:


bin:代表已經(jīng)編譯過的 go 語言的所有可執(zhí)行程序。
pkg:存儲默認文件,加快編譯速度。
src:所有的源文件。

GOPATH 的弊端
(1)無版本控制概念。無法知道當前拉取的是哪個版本,也無法指定拉取自己的期望版本。
(2)無法同步一致第三方版本號。無法保證自己的版本與其他人的版本一致。
(3)無法指定當前項目引用的第三方版本號。

Go Modules模式

go mod命令

通過:go mod help
可以查看go mod命令

命令作用
go mod init生成go.mod文件
go mod download下載go.mod 文件中指明的所有依賴
go mod tidy整理現(xiàn)有的依賴
go mod graph查看現(xiàn)有的依賴結構
go mod edit編輯 go.mod 文件
go mod vendor導出項目所有的依賴到vendor目錄
go mod verify校驗一個模塊是否被篡改過
go mod why查看為什么需要依賴某模塊

go mod環(huán)境變量

通過 go env 命令查看環(huán)境變量:

(1)GO111MODULE

Go語言提供了GO111MODULE這個環(huán)境變量來作為Gomodules的開關,其允許設置以下參數(shù):

  • auto:只要項目包含了go.mod文件的話啟期Go modules,目前在Go1.11至Go1.14中仍然是默認值。
  • on:啟用Gomodules,推薦設置,將會是未來版本中的默認值。
  • off:禁用Go modules,不推薦設置。

可以通過來設置:go env -w G0111MODULE=on

(2)GOPROXY

這個環(huán)境變量主要是用于設置Go模塊代理(Gomoduleproxy),其作用是用于使Go在后續(xù)拉取模塊版本時直接通過鏡像站點來快速拉取

GOPROXY 的默認值是:https://proxy.golang.org,direct
proxy·golang.org國內訪問不了,需要設置國內的代理。

  • 阿里云:https://mirrors.aliyun.com/goproxy/
  • 七牛云:https://goproxy.cn,direct

direct:用于指示Go回源到模塊版本的源地址去抓?。ū热鏕itHub等)

(3)GOSUMDB

它的值是一個Go checksum database,用于在拉取模塊版本時(無論是從源站拉取還是通過Gomodule proxy拉取)保證拉取到的模塊版本數(shù)據(jù)未經(jīng)過篡改,若發(fā)現(xiàn)不一致,也就是可能存在篡改,將會立即中止。

GOSUMDB 的默認值為:sum.golang.org,在國內也是無法訪問的,但是GOSUMDB 可以被Go模塊代理所代理。

因此我們可以通過設置GOPROXY來解決,而先前我們所設置的模塊代理goproxy.cn就能支持代理sum.golang.org,所以這一個問題在設置GOPROXY后,你可以不需要過度關心。

(4)GONOPROXY、GONOSUMDB、GOPRIVATE

  • GONOPROXY:通過設置GOPRIVATE即可
  • GONOSUMDB:通過設置GOPRIVATE即可
  • GOPRIVATE:
    go env -w GOPRIVATE="git.example.com,github.com/aceld/zinx:表示git.example.com和github.com/aceld/zinx是私有倉庫,不會進行GOPROXY下載和校驗。
    go evn -w GOPRIVATE="*example.com":表示所有模塊路徑為example.com的子域名,比如
    git.example.com或者hello.example.com都不進行GOPROXY下載和校驗。

Go Modules初始化項目

開啟Go Modules

go env -w GO111MODULE=on

初始化項目

創(chuàng)建項目目錄:在 E 盤下的 go_modules 文件夾下創(chuàng)建項目目錄為 modules_test。
執(zhí)行 Go modules 初始化,起一個當前項目的模塊名稱:go init github.com/go_modules/modules_test

初始化完成后,生成了 go.mod 文件:

打開 go.mod 文件:

在項目目錄下編寫源代碼,創(chuàng)建 main.go 文件

package main

import (
    "fmt"
    "github.com/aceld/zinx/znet"
    "github.com/aceld/zinx/ziface"
)

//ping test 自定義路由
type PingRouter struct {
    znet.BaseRouter
}

//Ping Handle
func (this *PingRouter) Handle(request ziface.IRequest) {
    //先讀取客戶端的數(shù)據(jù)
    fmt.Println("recv from client : msgId=", request.GetMsgID(), 
              ", data=", string(request.GetData()))

    //再回寫ping...ping...ping
    err := request.GetConnection().SendBuffMsg(0, []byte("ping...ping...ping"))
    if err != nil {
      fmt.Println(err)
    }
}

func main() {
    //1 創(chuàng)建一個server句柄
    s := znet.NewServer()

    //2 配置路由
    s.AddRouter(0, &PingRouter{})

    //3 開啟服務
    s.Serve()
}

當前的 go_modules/modules_test 項目,依賴一個叫github.com/aceld/zinx庫的,znet和ziface只是zinx的兩個模塊。

在 go_modules/modules_test 下執(zhí)行:go get github.com/aceld/zinx/znet

此時 go.mod 文件被修改,并生成了 go.sum 文件:

(1)go.mod 文件:

  • module:用于定義當前項目的模塊路徑
  • go:標識當前Go版本
  • require:當前項目依賴的一個特定的必須版本
    // indirect:表示該模塊為間接依賴。項目直接依賴的是 znet 包,間接依賴 zinx 包。

(2)go.sum 文件
go.sum 文件詳細羅列了當前項目直接或間接依賴的所有模塊版本,并寫明了模塊版本的 SHA-256 哈希值以備 Go 在今后的操作中保證項目所依賴的那些模塊版本不會被篡改

一個模塊路徑可能有如下兩種:

h1:hash情況:是 Go modules 將目標模塊版本的 zip 文件開包后,針對所有包內文件依次進行 hash,然后再把它們的 hash 結果按照固定格式和算法組成總的 hash 值。

go.mod hash情況:對 go.mod 文件做的hash

h1 hash 和 go.mod hash 兩者,要不就是同時存在,要不就是只存在 go.mod hash。當 Go 認為肯定用不到某個模塊版本的時候就會省略它的 h1 hash,就會出現(xiàn)不存在 h1 hash,只存在 go.mod hash 的情況。

修改模塊的版本依賴關系

當前依賴的zinx版本是最新版本:

如果想要使用以前的舊版本,可以通過在項目目錄下執(zhí)行:

go mod edit -replace=zinx@v1.2.7=zinx@v0.0.0-20200221135252-8a8954e75100

此時,go mod文件:

replace關鍵字:用于將一個模塊版本替換為另外一個模塊版本。

到此這篇關于Go Modules 依賴解決的實現(xiàn)的文章就介紹到這了,更多相關Go Modules 依賴內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 重學Go語言之基礎數(shù)據(jù)類型詳解

    重學Go語言之基礎數(shù)據(jù)類型詳解

    Go語言有非常強大的數(shù)據(jù)類型系統(tǒng),其支持的數(shù)據(jù)類型大體上可分為四類:基礎數(shù)據(jù)類型、引用數(shù)據(jù)類型、接口類型、復合類型。本文就來講講它們各自的用法吧
    2023-02-02
  • 基于微服務框架go-micro開發(fā)gRPC應用程序

    基于微服務框架go-micro開發(fā)gRPC應用程序

    這篇文章介紹了基于微服務框架go-micro開發(fā)gRPC應用程序的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Go項目中使用Casbin實現(xiàn)RBAC權限管理教程

    Go項目中使用Casbin實現(xiàn)RBAC權限管理教程

    本文主要介紹了Go項目中使用Casbin實現(xiàn)RBAC權限管理教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-01-01
  • 在Go網(wǎng)絡請求中配置代理的方法詳解

    在Go網(wǎng)絡請求中配置代理的方法詳解

    這篇文章主要給大家介紹了如何在Go網(wǎng)絡請求中配置代理的方法,文章通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • golang使用go test輸出單元測試覆蓋率的方式

    golang使用go test輸出單元測試覆蓋率的方式

    單元測試覆蓋率是衡量代碼質量的一個重要指標,重要的代碼文件覆蓋率應該至少達到80%以上,Java 可以通過JaCoCo 統(tǒng)計覆蓋率,那么go 項目如何進行代碼覆蓋率測試呢,本文將給大家詳細的介紹一下golang使用go test輸出單元測試覆蓋率的方式,需要的朋友可以參考下
    2024-02-02
  • Go語言數(shù)據(jù)庫編程GORM 的基本使用詳解

    Go語言數(shù)據(jù)庫編程GORM 的基本使用詳解

    GORM是Go語言流行的ORM框架,封裝database/sql,支持自動遷移、關聯(lián)、事務等,提供CRUD、條件查詢、鉤子函數(shù)、日志等功能,簡化數(shù)據(jù)庫操作,提升開發(fā)效率,本文給大家介紹Go語言GORM使用,感興趣的朋友一起看看吧
    2025-06-06
  • 詳解Golang中select的使用與源碼分析

    詳解Golang中select的使用與源碼分析

    select?是?Go?提供的?IO?多路復用機制,可以用多個?case?同時監(jiān)聽多個?channl?的讀寫狀態(tài)。本文將從源碼角度帶大家了解一下select的使用,需要的可以參考一下
    2022-12-12
  • Go語言使用SQLite實現(xiàn)本地存儲的示例詳解

    Go語言使用SQLite實現(xiàn)本地存儲的示例詳解

    在開發(fā)工具類軟件、桌面應用或者移動端時,我們經(jīng)常需要一個輕量級數(shù)據(jù)庫來做本地存儲,本文將帶你一步步用 Go 搭建一個 SQLite 本地存儲的示例,希望對大家有所幫助
    2025-08-08
  • 利用dep代替go get獲取私有庫的方法教程

    利用dep代替go get獲取私有庫的方法教程

    go get 從指定源上面下載或者更新指定的代碼和依賴,并對他們進行編譯和安裝,但go get功能比較差,所以下面這篇文章主要給大家介紹了關于利用dep代替go get獲取私有庫的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-11-11
  • go語言工程結構

    go語言工程結構

    這篇文章主要簡單介紹了go語言工程結構,對于我們學習go語言很有幫助,需要的朋友可以參考下
    2015-01-01

最新評論

宁强县| 连城县| 特克斯县| 抚宁县| 铁力市| 彭泽县| 锡林郭勒盟| 济宁市| 广德县| 永靖县| 余庆县| 金川县| 永川市| 明溪县| 祁连县| 安乡县| 海城市| 曲周县| 临江市| 台州市| 历史| 三江| 九寨沟县| 漳州市| 洪湖市| 金川县| 沭阳县| 个旧市| 鹰潭市| 外汇| 托克逊县| 固镇县| 南宁市| 永安市| 新巴尔虎右旗| 柳林县| 屯留县| 金寨县| 墨竹工卡县| 翁牛特旗| 双辽市|