真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言module go語言適合做什么

GO語言(二十七):管理依賴項(xiàng)(下)-

當(dāng)您對(duì)外部模塊的存儲(chǔ)庫進(jìn)行了 fork (例如修復(fù)模塊代碼中的問題或添加功能)時(shí),您可以讓 Go 工具將您的 fork 用于模塊的源代碼。這對(duì)于測(cè)試您自己的代碼的更改很有用。

專業(yè)從事成都網(wǎng)站制作、做網(wǎng)站,高端網(wǎng)站制作設(shè)計(jì),微信小程序,網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠服務(wù),采用HTML5+CSS3前端渲染技術(shù),響應(yīng)式網(wǎng)站開發(fā),讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動(dòng),隨時(shí)提供解決方案,暢聊想法和感受。

為此,您可以使用go.mod 文件中的replace指令將外部模塊的原始模塊路徑替換為存儲(chǔ)庫中 fork 的路徑。這指示 Go 工具在編譯時(shí)使用替換路徑(fork 的位置),例如,同時(shí)允許您保留import 原始模塊路徑中的語句不變。

在以下 go.mod 文件示例中,當(dāng)前模塊需要外部模塊example.com/theirmodule。然后該replace指令將原始模塊路徑替換為example.com/myfork/theirmodule模塊自己的存儲(chǔ)庫的分支。

設(shè)置require/replace對(duì)時(shí),使用 Go 工具命令確保文件描述的需求保持一致。使用go list命令獲取當(dāng)前模塊正在使用的版本。然后使用go mod edit命令將需要的模塊替換為fork:

注意: 當(dāng)您使用該replace指令時(shí),Go 工具不會(huì)像添加依賴項(xiàng)中所述對(duì)外部模塊進(jìn)行身份驗(yàn)證。

您可以使用go get命令從其存儲(chǔ)庫中的特定提交為模塊添加未發(fā)布的代碼。

為此,您使用go get命令,用符號(hào)@指定您想要的代碼 。當(dāng)您使用go get時(shí),該命令將向您的 go.mod 文件添加一個(gè) 需要外部模塊的require指令,使用基于有關(guān)提交的詳細(xì)信息的偽版本號(hào)。

以下示例提供了一些說明。這些基于源位于 git 存儲(chǔ)庫中的模塊。

當(dāng)您的代碼不再使用模塊中的任何包時(shí),您可以停止將該模塊作為依賴項(xiàng)進(jìn)行跟蹤。

要停止跟蹤所有未使用的模塊,請(qǐng)運(yùn)行g(shù)o mod tidy 命令。此命令還可能添加在模塊中構(gòu)建包所需的缺失依賴項(xiàng)。

要?jiǎng)h除特定依賴項(xiàng),請(qǐng)使用go get,指定模塊的模塊路徑并附加 @none,如下例所示:

go get命令還將降級(jí)或刪除依賴于已刪除模塊的其他依賴項(xiàng)。

當(dāng)您使用 Go 工具處理模塊時(shí),這些工具默認(rèn)從 proxy.golang.org(一個(gè)公共的 Google 運(yùn)行的模塊鏡像)或直接從模塊的存儲(chǔ)庫下載模塊。您可以指定 Go 工具應(yīng)該使用另一個(gè)代理服務(wù)器來下載和驗(yàn)證模塊。

如果您(或您的團(tuán)隊(duì))已經(jīng)設(shè)置或選擇了您想要使用的不同模塊代理服務(wù)器,您可能想要這樣做。例如,有些人設(shè)置了模塊代理服務(wù)器,以便更好地控制依賴項(xiàng)的使用方式。

要為 Go 工具指定另一個(gè)模塊代理服務(wù)器,請(qǐng)將GOPROXY 環(huán)境變量設(shè)置為一個(gè)或多個(gè)服務(wù)器的 URL。Go 工具將按照您指定的順序嘗試每個(gè) URL。默認(rèn)情況下,GOPROXY首先指定一個(gè)公共的 Google 運(yùn)行模塊代理,然后從模塊的存儲(chǔ)庫直接下載(在其模塊路徑中指定):

您可以將變量設(shè)置為其他模塊代理服務(wù)器的 URL,用逗號(hào)或管道分隔 URL。

Go 模塊經(jīng)常在公共互聯(lián)網(wǎng)上不可用的版本控制服務(wù)器和模塊代理上開發(fā)和分發(fā)。您可以設(shè)置 GOPRIVATE環(huán)境變量。您可以設(shè)置GOPRIVATE環(huán)境變量來配置go命令以從私有源下載和構(gòu)建模塊。然后 go 命令可以從私有源下載和構(gòu)建模塊。

GOPRIVATE或環(huán)境變量可以設(shè)置為匹配模塊前綴的全局模式列表,這些GONOPROXY前綴是私有的,不應(yīng)從任何代理請(qǐng)求。例如:

「測(cè)試開發(fā)全?;?Go」(1) Go語言基本了解

作為一個(gè)測(cè)試,作為一個(gè)測(cè)試開發(fā), 全棧化+管理 是我們未來的發(fā)展方向。已經(jīng)掌握了Java、Python、HTML的你,是不是也想了解下最近異?;鸨腉o語言呢?來吧,讓我們一起了解下。

Go 是一個(gè)開源的編程語言 ,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。

Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā),后來還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時(shí)候發(fā)布了Go 1穩(wěn)定版本?,F(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個(gè)活躍的社區(qū)。這三個(gè)人都是計(jì)算機(jī)界的大神,有的參與了C語言的編寫,有的還是數(shù)學(xué)大神,有的還獲得了計(jì)算機(jī)最高榮譽(yù)-圖靈獎(jiǎng)。

接下來說說 Go語言的特色 :

簡潔、快速、安全

并行、有趣、開源

內(nèi)存管理、數(shù)組安全、編譯迅速

Go語言的用途 :

Go 語言被設(shè)計(jì)成一門應(yīng)用于搭載 Web 服務(wù)器,存儲(chǔ)集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言。

對(duì)于高性能分布式系統(tǒng)領(lǐng)域而言,Go 語言無疑比大多數(shù)其它語言有著更高的開發(fā)效率。它提供了海量并行的支持,這對(duì)于 游戲 服務(wù)端的開發(fā)而言是再好不過了。

Go語言的環(huán)境安裝:

建議直接打開 官方地址因?yàn)閴Φ脑虼虿婚_

因?yàn)槲矣玫氖莣indows系統(tǒng),這里主要講下Windows系統(tǒng)上使用Go語言來編程。

Windows 下可以使用 .msi 后綴(在下載列表中可以找到該文件,如go1.17.2.windows-amd64.msi)的安裝包來安裝。

默認(rèn)情況下 .msi 文件會(huì)安裝在 c:Go 目錄下。你可以將 c:Gobin 目錄添加到 Path 環(huán)境變量中。添加后你需要重啟命令窗口才能生效。個(gè)人建議還是安裝到 Program Files文件夾中。

使用什么開發(fā)工具來對(duì)Go語言進(jìn)行編寫:

個(gè)人建議用VS code, 也可以用Sublime Text來編輯。如果你之前看了我講的HTML語言的學(xué)習(xí),肯定已經(jīng)下載了VS code. 那么這時(shí)你需要在VS code中下載Go語言的擴(kuò)展插件。

這里有一個(gè)巨大的坑,就是在下載Go的插件和依賴包時(shí),會(huì)提示一些包沒有。主要是因?yàn)橄螺d的依賴包部分被墻了,只能想別的辦法去下載。

建議參考網(wǎng)頁:

解決vscode中g(shù)olang插件安裝失敗方法

在學(xué)習(xí)go的過程中,使用的是vscode,但是一直提示安裝相關(guān)插件失敗,然后上網(wǎng)查方法,基本上是叫你建立golang.org目錄什么的,結(jié)果全是錯(cuò)的,而且都是抄襲,很煩。無意之中看到一位博主分享的方法,他也是飽受上述的垃圾博文困擾,然后找到了解決方法,這里向他致敬,秉著讓更多人看到正確解決方法的心,我寫下正確的解決方法,希望對(duì)你有所幫助,也可以點(diǎn)開原博主鏈接參考:

Go有一個(gè)全球模塊代理,設(shè)置代理再去安裝golang的插件,就可以安裝成功了。步驟有,首先Windows用戶打開Powershell,一個(gè)藍(lán)色的界面,注意不是cmd!不知道的直接打開window下面的搜索,然后輸入powershell,搜索出來就可以了。

$env:GO111MODULE=“on”

$env:GOPROXY=“”

go env -w GOPROXY=

go env -w GOPRIVATE=*.corp.example.com

然后我們打開VsCode界面,下面會(huì)提示安裝插件,我們選擇Install ALL,就會(huì)安裝成功

當(dāng)你在運(yùn)行Go語言程序時(shí),提示所有的插件包都已經(jīng)安裝成功了時(shí),就可以正常使用了,要不然一堆報(bào)錯(cuò)會(huì)讓你非常心煩。

好了,今天先到這里,晚安、下班~

使用Go Module構(gòu)建項(xiàng)目

Golang 配置不是這里要討論的新話題。但是在Go 1.12發(fā)布之后,我認(rèn)為必須重新定義步驟,因?yàn)轫?xiàng)目設(shè)置變得比以前簡單明了。

在搜索配置步驟時(shí),除了少數(shù)文章之外,大部分內(nèi)容仍然是分享舊方式,即

通過本文,我們將看到項(xiàng)目設(shè)置及其發(fā)布如何在Go 1.12版本中進(jìn)行。

在1.11版本中,Go引入了名為Go Modules的內(nèi)置包管理,它正在開始進(jìn)行重大改變Go生態(tài)系統(tǒng)。它是GOPATH的替代品,集成了版本控制和軟件包分發(fā)支持。

來自Go博客,

由于1.12版本的Go模塊默認(rèn)啟用,GOPATH將在1.13版本中棄用。

對(duì)于那些開始使用Go 1.12的人來說,安裝和設(shè)置將如下所示。

安裝Go

在Mac上

在Ubuntu上

*從Go 1.8開始,將GOPATH設(shè)置為環(huán)境變量不是必需的。如果我們沒有設(shè)置一個(gè),Go使用默認(rèn)的GOPATH為 $HOME/go

構(gòu)建項(xiàng)目

讓我們?cè)贕OPATH之外的首選位置為go項(xiàng)目創(chuàng)建文件夾

初始化模塊

使用Go模塊初始化項(xiàng)目名稱。

這將創(chuàng)建模塊配置文件go.mod,其中包含模塊名稱和版本。

此go.mod文件定義Module的根,go命令將相應(yīng)地與包一起使用,作為GOPATH的替代。

使用模塊

Go模塊主要解決以下用例,

依賴管理

讓我們使用jsoniter設(shè)置簡單的json數(shù)據(jù)生成應(yīng)用程序。

該go.mod配置的工作通常喜歡gemfile用Ruby,requirement.txtPython中或其他依賴管理工具,但不完全是。

構(gòu)建go時(shí),將根據(jù)go代碼中的import語句獲取最新版本的依賴項(xiàng),并go.mod使用所需的依賴項(xiàng)更新配置。

對(duì)于我們的示例,go build將獲取最新的jsoniter及其依賴項(xiàng)。

每次go.mod得更新,go build命令創(chuàng)建一個(gè)名為的文件,go.sum其中包含特定模塊版本內(nèi)容的預(yù)期加密校驗(yàn)和。

go.sum 不是鎖 文件。它僅用于驗(yàn)證目的。有關(guān)詳細(xì)信息,請(qǐng)參閱這里 FAQ。

解決自定義包

讓我們創(chuàng)建一個(gè)自定義包并驗(yàn)證它是否在沒有GOPATH的情況下得到解決。我創(chuàng)建了一個(gè)名為的包handlers

編寫一個(gè)函數(shù)

使用main.go中的自定義包功能,

現(xiàn)在go build解析沒有GOPATH的自定義包。二進(jìn)制文件將在指定的模塊名稱中創(chuàng)建go.mod 。

讓我們執(zhí)行結(jié)果。

總結(jié)

模塊系統(tǒng)將幫助我們?yōu)镚o生態(tài)系統(tǒng)提供更好的身份驗(yàn)證和構(gòu)建速度。

記一次go module的坑

事情是這樣的,因?yàn)樾●R本次要寫一個(gè)go項(xiàng)目。但是因?yàn)橐恍?quán)限問題,一些依賴包在內(nèi)網(wǎng)小馬獲取不到,于是只能求助大大。大大給的策略就是他先把所有的依賴包go mod,然后go mod vendor遷移到項(xiàng)目目錄vendor下進(jìn)行本地依賴載入即可,也就是使用 go build -mod=vendor來編譯即可。一切似乎看起來還是那么完美。然后正要起飛,直接翻車,現(xiàn)場如下?!具@里插播一條發(fā)現(xiàn),就是使用golang IDE go build 和使用命令行g(shù)o build 的區(qū)別在于前者不會(huì)生成.exe文件】

將大大go mod vendor完的包pull到本地,只要編譯就會(huì)發(fā)生如下錯(cuò)誤(以下省略了一部分類似的報(bào)錯(cuò))。其實(shí)是 go.mod內(nèi)的所有依賴包都報(bào)錯(cuò)。

大大說他的本地編譯是正常的。不得不懷疑是不是因?yàn)榇蟠蟊镜豨opath還有一份包依賴的原因,然而經(jīng)查并不是這個(gè)問題。翻閱了網(wǎng)絡(luò)上的大部分資料無果,網(wǎng)絡(luò)上要么是說是因?yàn)樽R(shí)別不到包,按照提示重新go?mod?vendor一下就可以了。小馬蠻試了一下,不出所料必然地報(bào)遠(yuǎn)程報(bào)獲取不到呢,IDE的報(bào)錯(cuò)定位其實(shí)是不準(zhǔn)確的。再次檢查vendor/modules.txt文件,沒有問題,無果。 于是開始質(zhì)疑golang IDE 的版本支持問題,無果。看了下go.mod文件中寫著go 1.14,也沒錯(cuò)呢,小馬用的GO SDK正是1.14.4版本。敲出go env 查看環(huán)境配置,GO111MODULE=on,因?yàn)榄h(huán)境變量是auto,但是go到一定版本后默認(rèn)是on,也沒問題,無果。那問題出在哪呢?由于沒有依賴包拉取權(quán)限,只能再次求助大大,大大表示也很奇怪,一番折騰,于是問題得到解決?!具@里插播一條好玩的東西,就是GO111MODULE為什么是GO111呢,因?yàn)槠鋵?shí)1.11版本開始支持MODULE的】

結(jié)論是:因?yàn)榇蟠骻o? mod的時(shí)候用的是go 1.13,而我編譯的時(shí)候用的 1.14,所以就報(bào)了這個(gè)奇怪的錯(cuò)誤。you what?直接懵逼。但是為啥go.mod文件中寫的版本要求是1.14,而大大用1.13也編譯得好好的。

這是個(gè)大坑,掉進(jìn)坑里自己撲騰了一天!!希望大家謹(jǐn)慎入坑。

爬坑一小時(shí)出坑一秒鐘,每一次的爬坑都是充滿著十八般絕技。奇怪的姿勢(shì)又增加了。

go運(yùn)行方式有哪幾種?

如果GO111MODULE是auto則根據(jù)項(xiàng)目目錄位置和是否含有g(shù)o.mod文件來決定使用什么模式。如果是GO111MODULE=off則使用gopath,如果是on則使用module模式。gopath模式下的src目錄下不能有g(shù)o.mod文件,否則報(bào)錯(cuò)。

一些go mod命令 記錄備用,國內(nèi)的資料并不多(注意go mod?命令在?$GOPATH?里默認(rèn)是執(zhí)行不了的,因?yàn)?GO111MODULE?的默認(rèn)值是?auto。默認(rèn)在$GOPATH?里是不會(huì)執(zhí)行, 如果一定要強(qiáng)制執(zhí)行,就設(shè)置環(huán)境變量為?on。):

一學(xué)就會(huì),手把手教你用Go語言調(diào)用智能合約

智能合約調(diào)用是實(shí)現(xiàn)一個(gè) DApp 的關(guān)鍵,一個(gè)完整的 DApp 包括前端、后端、智能合約及區(qū)塊 鏈系統(tǒng),智能合約的調(diào)用是連接區(qū)塊鏈與前后端的關(guān)鍵。

我們先來了解一下智能合約調(diào)用的基礎(chǔ)原理。智能合約運(yùn)行在以太坊節(jié)點(diǎn)的 EVM 中。因此要 想調(diào)用合約必須要訪問某個(gè)節(jié)點(diǎn)。

以后端程序?yàn)槔?,后端服?wù)若想連接節(jié)點(diǎn)有兩種可能,一種是雙 方在同一主機(jī),此時(shí)后端連接節(jié)點(diǎn)可以采用 本地 IPC(Inter-Process Communication,進(jìn) 程間通信)機(jī)制,也可以采用 RPC(Remote Procedure Call,遠(yuǎn)程過程調(diào)用)機(jī)制;另 一種情況是雙方不在同一臺(tái)主機(jī),此時(shí)只能采用 RPC 機(jī)制進(jìn)行通信。

提到 RPC, 讀者應(yīng)該對(duì) Geth 啟動(dòng)參數(shù)有點(diǎn)印象,Geth 啟動(dòng)時(shí)可以選擇開啟 RPC 服務(wù),對(duì)應(yīng)的 默認(rèn)服務(wù)端口是 8545。。

接著,我們來了解一下智能合約運(yùn)行的過程。

智能合約的運(yùn)行過程是后端服務(wù)連接某節(jié)點(diǎn),將 智能合約的調(diào)用(交易)發(fā)送給節(jié)點(diǎn),節(jié)點(diǎn)在驗(yàn)證了交易的合法性后進(jìn)行全網(wǎng)廣播,被礦工打包到 區(qū)塊中代表此交易得到確認(rèn),至此交易才算完成。

就像數(shù)據(jù)庫一樣,每個(gè)區(qū)塊鏈平臺(tái)都會(huì)提供主流 開發(fā)語言的 SDK(Software Development Kit,軟件開發(fā)工具包),由于 Geth 本身就是用 Go 語言 編寫的,因此若想使用 Go 語言連接節(jié)點(diǎn)、發(fā)交易,直接在工程內(nèi)導(dǎo)入 go-ethereum(Geth 源碼) 包就可以了,剩下的問題就是流程和 API 的事情了。

總結(jié)一下,智能合約被調(diào)用的兩個(gè)關(guān)鍵點(diǎn)是節(jié)點(diǎn)和 SDK。

由于 IPC 要求后端與節(jié)點(diǎn)必須在同一主機(jī),所以很多時(shí)候開發(fā)者都會(huì)采用 RPC 模式。除了 RPC,以太坊也為開發(fā)者提供了 json- rpc 接口,本文就不展開討論了。

接下來介紹如何使用 Go 語言,借助 go-ethereum 源碼庫來實(shí)現(xiàn)智能合約的調(diào)用。這是有固定 步驟的,我們先來說一下總體步驟,以下面的合約為例。

步驟 01:編譯合約,獲取合約 ABI(Application Binary Interface,應(yīng)用二進(jìn)制接口)。 單擊【ABI】按鈕拷貝合約 ABI 信息,將其粘貼到文件 calldemo.abi 中(可使用 Go 語言IDE 創(chuàng)建該文件,文件名可自定義,后綴最好使用 abi)。

最好能將 calldemo.abi 單獨(dú)保存在一個(gè)目錄下,輸入“l(fā)s”命令只能看到 calldemo.abi 文件,參 考效果如下:

步驟 02:獲得合約地址。注意要將合約部署到 Geth 節(jié)點(diǎn)。因此 Environment 選擇為 Web3 Provider。

在【Environment】選項(xiàng)框中選擇“Web3 Provider”,然后單擊【Deploy】按鈕。

部署后,獲得合約地址為:0xa09209c28AEf59a4653b905792a9a910E78E7407。

步驟 03:利用 abigen 工具(Geth 工具包內(nèi)的可執(zhí)行程序)編譯智能合約為 Go 代碼。abigen 工具的作用是將 abi 文件轉(zhuǎn)換為 Go 代碼,命令如下:

其中各參數(shù)的含義如下。 (1)abi:是指定傳入的 abi 文件。 (2)type:是指定輸出文件中的基本結(jié)構(gòu)類型。 (3)pkg:指定輸出文件 package 名稱。 (4)out:指定輸出文件名。 執(zhí)行后,將在代碼目錄下看到 funcdemo.go 文件,讀者可以打開該文件欣賞一下,注意不要修改它。

步驟 04:創(chuàng)建 main.go,填入如下代碼。 注意代碼中 HexToAddress 函數(shù)內(nèi)要傳入該合約部署后的地址,此地址在步驟 01 中獲得。

步驟 04:設(shè)置 go mod,以便工程自動(dòng)識(shí)別。

前面有所提及,若要使用 Go 語言調(diào)用智能合約,需要下載 go-ethereum 工程,可以使用下面 的指令:

該指令會(huì)自動(dòng)將 go-ethereum 下載到“$GOPATH/src/github.com/ethereum/go-ethereum”,這樣還算 不錯(cuò)。不過,Go 語言自 1.11 版本后,增加了 module 管理工程的模式。只要設(shè)置好了 go mod,下載 依賴工程的事情就不必關(guān)心了。

接下來設(shè)置 module 生效和 GOPROXY,命令如下:

在項(xiàng)目工程內(nèi),執(zhí)行初始化,calldemo 可以自定義名稱。

步驟 05:運(yùn)行代碼。執(zhí)行代碼,將看到下面的效果,以及最終輸出的 2020。

上述輸出信息中,可以看到 Go 語言會(huì)自動(dòng)下載依賴文件,這就是 go mod 的神奇之處??吹?2020,相信讀者也知道運(yùn)行結(jié)果是正確的了。


文章標(biāo)題:go語言module go語言適合做什么
分享路徑:http://weahome.cn/article/hjedpp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部