1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      go語言獲取主機(jī)名的簡單介紹

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

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

      企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對(duì)外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),成都創(chuàng)新互聯(lián)面向各種領(lǐng)域:成都OPP膠袋成都網(wǎng)站設(shè)計(jì)公司全網(wǎng)營銷推廣解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。


      為此,您可以使用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)求。例如:

      GO語言(三十):訪問關(guān)系型數(shù)據(jù)庫(上)

      本教程介紹了使用 Godatabase/sql及其標(biāo)準(zhǔn)庫中的包訪問關(guān)系數(shù)據(jù)庫的基礎(chǔ)知識(shí)。

      您將使用的database/sql包包括用于連接數(shù)據(jù)庫、執(zhí)行事務(wù)、取消正在進(jìn)行的操作等的類型和函數(shù)。

      在本教程中,您將創(chuàng)建一個(gè)數(shù)據(jù)庫,然后編寫代碼來訪問該數(shù)據(jù)庫。您的示例項(xiàng)目將是有關(guān)老式爵士樂唱片的數(shù)據(jù)存儲(chǔ)庫。

      首先,為您要編寫的代碼創(chuàng)建一個(gè)文件夾。

      1、打開命令提示符并切換到您的主目錄。

      在 Linux 或 Mac 上:

      在 Windows 上:

      2、在命令提示符下,為您的代碼創(chuàng)建一個(gè)名為 data-access 的目錄。

      3、創(chuàng)建一個(gè)模塊,您可以在其中管理將在本教程中添加的依賴項(xiàng)。

      運(yùn)行g(shù)o mod init命令,為其提供新代碼的模塊路徑。

      此命令創(chuàng)建一個(gè) go.mod 文件,您添加的依賴項(xiàng)將在其中列出以供跟蹤。

      注意: 在實(shí)際開發(fā)中,您會(huì)指定一個(gè)更符合您自己需求的模塊路徑。有關(guān)更多信息,請(qǐng)參閱一下文章。

      GO語言(二十五):管理依賴項(xiàng)(上)

      GO語言(二十六):管理依賴項(xiàng)(中)

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

      接下來,您將創(chuàng)建一個(gè)數(shù)據(jù)庫。

      在此步驟中,您將創(chuàng)建要使用的數(shù)據(jù)庫。您將使用 DBMS 本身的 CLI 創(chuàng)建數(shù)據(jù)庫和表,以及添加數(shù)據(jù)。

      您將創(chuàng)建一個(gè)數(shù)據(jù)庫,其中包含有關(guān)黑膠唱片上的老式爵士樂錄音的數(shù)據(jù)。

      這里的代碼使用MySQL CLI,但大多數(shù) DBMS 都有自己的 CLI,具有類似的功能。

      1、打開一個(gè)新的命令提示符。

      在命令行,登錄到您的 DBMS,如下面的 MySQL 示例所示。

      2、在mysql命令提示符下,創(chuàng)建一個(gè)數(shù)據(jù)庫。

      3、切到您剛剛創(chuàng)建的數(shù)據(jù)庫,以便您可以添加表。

      4、在文本編輯器的 data-access 文件夾中,創(chuàng)建一個(gè)名為 create-tables.sql 的文件來保存用于添加表的 SQL 腳本。

      將以下 SQL 代碼粘貼到文件中,然后保存文件。

      在此 SQL 代碼中:

      (1)刪除名為album表。 首先執(zhí)行此命令可以讓您更輕松地稍后重新運(yùn)行腳本。

      (2)創(chuàng)建一個(gè)album包含四列的表:title、artist和price。每行的id值由 DBMS 自動(dòng)創(chuàng)建。

      (3)添加帶有值的四行。

      5、在mysql命令提示符下,運(yùn)行您剛剛創(chuàng)建的腳本。

      您將使用以下形式的source命令:

      6、在 DBMS 命令提示符處,使用SELECT語句來驗(yàn)證您是否已成功創(chuàng)建包含數(shù)據(jù)的表。

      接下來,您將編寫一些 Go 代碼進(jìn)行連接,以便進(jìn)行查詢。

      現(xiàn)在你已經(jīng)有了一個(gè)包含一些數(shù)據(jù)的數(shù)據(jù)庫,開始你的 Go 代碼。

      找到并導(dǎo)入一個(gè)數(shù)據(jù)庫驅(qū)動(dòng)程序,該驅(qū)動(dòng)程序會(huì)將您通過database/sql包中的函數(shù)發(fā)出的請(qǐng)求轉(zhuǎn)換為數(shù)據(jù)庫可以理解的請(qǐng)求。

      1、在您的瀏覽器中,訪問SQLDrivers wiki 頁面以識(shí)別您可以使用的驅(qū)動(dòng)程序。

      2、使用頁面上的列表來識(shí)別您將使用的驅(qū)動(dòng)程序。為了在本教程中訪問 MySQL,您將使用 Go-MySQL-Driver。

      3、請(qǐng)注意驅(qū)動(dòng)程序的包名稱 - 此處為github.com/go-sql-driver/mysql.

      4、使用您的文本編輯器,創(chuàng)建一個(gè)用于編寫 Go 代碼的文件,并將該文件作為 main.go 保存在您之前創(chuàng)建的數(shù)據(jù)訪問目錄中。

      5、進(jìn)入main.go,粘貼以下代碼導(dǎo)入驅(qū)動(dòng)包。

      在此代碼中:

      (1)將您的代碼添加到main包中,以便您可以獨(dú)立執(zhí)行它。

      (2)導(dǎo)入 MySQL 驅(qū)動(dòng)程序github.com/go-sql-driver/mysql。

      導(dǎo)入驅(qū)動(dòng)程序后,您將開始編寫代碼以訪問數(shù)據(jù)庫。

      現(xiàn)在編寫一些 Go 代碼,讓您使用數(shù)據(jù)庫句柄訪問數(shù)據(jù)庫。

      您將使用指向結(jié)構(gòu)的指針sql.DB,它表示對(duì)特定數(shù)據(jù)庫的訪問。

      編寫代碼

      1、進(jìn)入 main.go,在import您剛剛添加的代碼下方,粘貼以下 Go 代碼以創(chuàng)建數(shù)據(jù)庫句柄。

      在此代碼中:

      (3)使用 MySQL 驅(qū)動(dòng)程序Config和FormatDSN類型以收集連接屬性并將它們格式化為連接字符串的 DSN。

      該Config結(jié)構(gòu)使代碼比連接字符串更容易閱讀。

      (4)調(diào)用sql.Open 初始化db變量,傳遞 FormatDSN。

      (5)檢查來自 的錯(cuò)誤sql.Open。例如,如果您的數(shù)據(jù)庫連接細(xì)節(jié)格式不正確,它可能會(huì)失敗。

      為了簡化代碼,您調(diào)用log.Fatal結(jié)束執(zhí)行并將錯(cuò)誤打印到控制臺(tái)。在生產(chǎn)代碼中,您會(huì)希望以更優(yōu)雅的方式處理錯(cuò)誤。

      (6)調(diào)用DB.Ping以確認(rèn)連接到數(shù)據(jù)庫有效。在運(yùn)行時(shí), sql.Open可能不會(huì)立即連接,具體取決于驅(qū)動(dòng)程序。您在Ping此處使用以確認(rèn) database/sql包可以在需要時(shí)連接。

      (7)檢查來自Ping的錯(cuò)誤,以防連接失敗。

      (8)Ping如果連接成功,則打印一條消息。

      文件的頂部現(xiàn)在應(yīng)該如下所示:

      3、保存 main.go。

      1、開始跟蹤 MySQL 驅(qū)動(dòng)程序模塊作為依賴項(xiàng)。

      使用go get 添加 github.com/go-sql-driver/mysql 模塊作為您自己模塊的依賴項(xiàng)。使用點(diǎn)參數(shù)表示“獲取當(dāng)前目錄中代碼的依賴項(xiàng)”。

      2、在命令提示符下,設(shè)置Go 程序使用的DBUSER和DBPASS環(huán)境變量。

      在 Linux 或 Mac 上:

      在 Windows 上:

      3、在包含 main.go 的目錄中的命令行中,通過鍵入go run來運(yùn)行代碼。

      連接成功了!

      接下來,您將查詢一些數(shù)據(jù)。

      如何配置go語言開發(fā)環(huán)境

      1、下載go的zip文件。并且一定要把文件解壓到c:\go目錄下。

      2、配置windows的高級(jí)環(huán)境變量。包括:GOROOT、GOOS、GOBIN、GOARCH。并且在path變量里面把c:\go\bin加入。以便可以在命令行直接運(yùn)行g(shù)o命令。

      舉例:我的機(jī)器:

      GOPATH= c:\go;c:\go\src;F:\workspace\goSample01;

      GOBIN=c:\go\bin;F:\workspace\goSample01\bin;

      其中,c:\go是go的安裝路徑;

      F:\workspace\goSample01是我寫的go語言項(xiàng)目的工程目錄;

      F:\workspace\goSample01\bin是go語言項(xiàng)目的工程目錄下的可執(zhí)行文件路徑;

      3、在完成環(huán)境變量配置后,打開一個(gè)命令行窗口,直接輸入go,然后回車,看看是否出現(xiàn)go的幫助信息。如果出現(xiàn),那么go的基本環(huán)境就OK了。

      注意:這個(gè)基本環(huán)境不包含開發(fā)工具,也不能直接編譯帶C代碼的go程序。

      4、

      (可選)為了支持Import遠(yuǎn)程包,最好裝個(gè)gomingw。下載地址:

      /downloads/list。如果下的是壓縮包,請(qǐng)把它解壓到C盤。例如,C:\gowin-env。里面有個(gè)Console.bat是以后使用go

      get的環(huán)境。舉例:有個(gè)文件a.go,里面import(

      "fmt"

      "github.com/astaxie/beedb"

      _ "github.com/ziutek/mymysql/godrv"

      為了編譯該a.go文件,需要啟動(dòng)Console.bat,然后在該命令行窗口,進(jìn)入c:\go\src目錄下,執(zhí)行g(shù)o getgithub.com/astaxie/beedb

      Go get github.com/ziutek/mymysql/godrv .

      Go會(huì)自動(dòng)下載該遠(yuǎn)程包并編譯和安裝這些包。

      配置goclipse(可選)

      (如果不喜歡eclipse開發(fā)工具,請(qǐng)?zhí)^這個(gè)配置。)

      1、下載并安裝goclipse插件。Goclipse是go語言for eclipse的插件,下載地址:

      2、啟動(dòng)eclipse并創(chuàng)建go項(xiàng)目。然后寫個(gè)最簡單的helloworld.go文件,并運(yùn)行。代碼如下:

      packagemainimport"fmt"func main(){ fmt.Printf("hello, world")}

      配置gocode(可選)

      如果不需要go語法輔助和eclipse里面的(按ALT+/)彈出go語言自動(dòng)輔助功能,請(qǐng)?zhí)^這個(gè)配置。

      1、下載gocode的zip文件,解壓后放在go的bin目錄下。

      2、下載并安裝Git軟件。并且在path里面配置git的執(zhí)行路徑。例如c:\git\bin

      3、在命令行執(zhí)行:go build .\gocode。如果一切正常,那么將會(huì)編譯生成一個(gè)gocode.exe文件在go的bin目錄下。如果編譯失敗,那么就轉(zhuǎn)第4步。

      4、如果第3步直接編譯gocode源文件成功,那就直接到第5步。否則,就需要通過git下載gocode源文件,然后再編譯。在命令行執(zhí)行:go get -u github.com/nsf/gocode 。就會(huì)生成gocode.exe文件。

      5、在goclipse插件里面指定gocode的路徑。就可以在elcipse里面調(diào)用gocode來幫助寫編碼了。

      從開發(fā)工具這塊看,go語言還不夠成熟,開發(fā)工具都還不完善,有待改進(jìn)。

      下載go-tour教程源代碼(可選)

      Google有個(gè)在線運(yùn)行g(shù)o語言的教程(),很不錯(cuò)。支持在web上直接運(yùn)行大部分的go程序,想了解這個(gè)教程的源代碼的朋友可以通過以下方式獲取。如果沒興趣,可以跳過這個(gè)步驟。

      1、下載安裝Mercurial軟件。

      2、在命令行下輸入:

      hg clone

      作為測試用的。如果把http改成https協(xié)議,下載就會(huì)失敗。搞不懂。

      編譯帶調(diào)用C代碼的go文件(可選)

      1、為了在windows下編譯帶C代碼的go程序,你首先需要下載并安裝MinGW或者Cygwin。

      2、首選安裝MinGW。在安裝MinGW之后,記得要把MinGW安裝目錄\bin路徑設(shè)置在path環(huán)境變量里面,以便能在dos窗口下直接調(diào)用gcc。

      3、下載一個(gè)gowin-env。下載地址:gowin-env。下載后解壓到某個(gè)目錄下,例如:C:\gowin-env. 然后,編輯go-env.bat。配置相關(guān)的go參數(shù)。例如,我的配置是:

      set GOARCH=386

      set GOOS=windows

      set GOROOT=c:\go

      set GOBIN=%GOROOT%\bin

      set GOPATH=%GOROOT%;F:\workspace\goSample01;

      設(shè)置好go-env.bat后,就可以點(diǎn)擊Console.bat來啟動(dòng)編譯和運(yùn)行窗口。

      4、編寫一個(gè)帶C代碼的go程序。例如,testc.go

      5、編譯

      例如:

      go build -compiler gccgo test_c.go

      運(yùn)行調(diào)用C代碼的go文件(可選)

      1、testc.go.

      創(chuàng)建rand目錄,然后在rand里面創(chuàng)建testc.go. 代碼如下:

      package rand

      /*

      //

      #include stdio.h

      */

      import "C"

      func PrintHello() {

      C.puts(C.CString("Hello, world\n"))

      }

      2、a.go

      在rand下創(chuàng)建a.go.代碼如下:

      package rand

      import "fmt"

      func SayHello(name string){

      fmt.Println(name)

      }

      3、test_import.go

      在rand的上一級(jí)創(chuàng)建test_import.go。代碼如下:

      package main

      import "./rand"

      func main(){

      rand.SayHello("tom")

      rand.PrintHello()

      }

      4、運(yùn)行test_import.go

      go run test_import.go

      在測試其它幾個(gè)C代碼的時(shí)候,發(fā)現(xiàn)windows版本的cgo還有些編譯問題,同樣的代碼轉(zhuǎn)移到蘋果的XCODE下就沒有問題。后來終于發(fā)現(xiàn)原因了,原來有些例子是unix平臺(tái)下的,而在windows平臺(tái)下,方法名和參數(shù)需要做調(diào)整。

      例如:下面代碼在windows下編譯報(bào)一堆錯(cuò)誤。

      package rand

      /*

      #include stdlib.h

      */

      import "C"

      func Random() int {

      return int(C.random())

      }

      func Seed(i int) {

      C.srandom(C.uint(i))

      }

      這里需要把return int(C.random()) 修改為“return int(C.rand())”

      C.srandom(C.uint(i))修改為“C.srand(C.uint(i))”編譯就OK了。

      go語言中怎么獲取域名對(duì)應(yīng)的ip地址

      package main

      import (

      "fmt"

      "net"

      "os"

      )

      func main() {

      addrs, err := net.InterfaceAddrs()

      if err != nil {

      fmt.Println(err)

      os.Exit(1)

      }

      for _, address := range addrs {

      // 檢查ip地址判斷是否回環(huán)地址

      if ipnet, ok := address.(*net.IPNet); ok !ipnet.IP.IsLoopback() {

      if ipnet.IP.To4() != nil {

      fmt.Println(ipnet.IP.String())

      }

      }

      }

      }

      一學(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é)果是正確的了。

      如何使用Go語言實(shí)現(xiàn)遠(yuǎn)程執(zhí)行命令

      一般命令

      所謂一般命令,就是在一定時(shí)間內(nèi)會(huì)執(zhí)行完的命令。比如 grep, cat 等等。 執(zhí)行命令的步驟是:連接,執(zhí)行,獲取結(jié)果

      連接

      連接包含了認(rèn)證,可以使用 password 或者 sshkey 2種方式來認(rèn)證。下面的示例為了簡單,使用了密碼認(rèn)證的方式來完成連接。

      import (

      "fmt"

      "time"

      "golang.org/x/crypto/ssh"

      )

      func connect(user, password, host string, port int) (*ssh.Session, error) {

      var (

      auth []ssh.AuthMethod

      addr string

      clientConfig *ssh.ClientConfig

      client *ssh.Client

      session *ssh.Session

      err error

      )

      // get auth method

      auth = make([]ssh.AuthMethod, 0)

      auth = append(auth, ssh.Password(password))

      clientConfig = ssh.ClientConfig{

      User: user,

      Auth: auth,

      Timeout: 30 * time.Second,

      }

      // connet to ssh

      addr = fmt.Sprintf("%s:%d", host, port)

      if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {

      return nil, err

      }

      // create session

      if session, err = client.NewSession(); err != nil {

      return nil, err

      }

      return session, nil

      }

      連接的方法很簡單,只要提供登錄主機(jī)的 用戶*, *密碼*, *主機(jī)名或者IP*, *SSH端口

      執(zhí)行,命令獲取結(jié)果

      連接成功后,執(zhí)行命令很簡單

      import (

      "fmt"

      "log"

      "os"

      "time"

      "golang.org/x/crypto/ssh"

      )

      func main() {

      session, err := connect("root", "xxxxx", "127.0.0.1", 22)

      if err != nil {

      log.Fatal(err)

      }

      defer session.Close()

      session.Run("ls /; ls /abc")

      }

      上面代碼運(yùn)行之后,雖然命令正常執(zhí)行了,但是沒有正常輸出的結(jié)果,也沒有異常輸出的結(jié)果。 要想顯示結(jié)果,需要將 session 的 Stdout 和 Stderr 重定向 修改 func main 為如下:

      func main() {

      session, err := connect("root", "xxxxx", "127.0.0.1", 22)

      if err != nil {

      log.Fatal(err)

      }

      defer session.Close()

      session.Stdout = os.Stdout

      session.Stderr = os.Stderr

      session.Run("ls /; ls /abc")

      }

      這樣就能在屏幕上顯示正常,異常的信息了。

      交互式命令

      上面的方式無法遠(yuǎn)程執(zhí)行交互式命令,比如 top , 遠(yuǎn)程編輯一個(gè)文件,比如 vi /etc/nginx/nginx.conf 如果要支持交互式的命令,需要當(dāng)前的terminal來接管遠(yuǎn)程的 PTY。

      func main() {

      session, err := connect("root", "olordjesus", "dockers.iotalabs.io", 2210)

      if err != nil {

      log.Fatal(err)

      }

      defer session.Close()

      fd := int(os.Stdin.Fd())

      oldState, err := terminal.MakeRaw(fd)

      if err != nil {

      panic(err)

      }

      defer terminal.Restore(fd, oldState)

      // excute command

      session.Stdout = os.Stdout

      session.Stderr = os.Stderr

      session.Stdin = os.Stdin

      termWidth, termHeight, err := terminal.GetSize(fd)

      if err != nil {

      panic(err)

      }

      // Set up terminal modes

      modes := ssh.TerminalModes{

      ssh.ECHO: 1, // enable echoing

      ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud

      ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud

      }

      // Request pseudo terminal

      if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil {

      log.Fatal(err)

      }

      session.Run("top")

      }


      分享名稱:go語言獲取主機(jī)名的簡單介紹
      瀏覽地址:http://ef60e0e.cn/article/hsisgg.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        新野县| 黔江区| 桂东县| 延安市| 平顺县| 泽州县| 双柏县| 嘉祥县| 曲沃县| 固阳县| 阿拉善左旗| 曲阳县| 汉川市| 南木林县| 隆昌县| 云林县| 砀山县| 望奎县| 晋江市| 宝山区| 双峰县| 肇东市| 高安市| 甘肃省| 兴宁市| 吉首市| 衡阳市| 内黄县| 横峰县| 安国市| 涞水县| 金阳县| 邵东县| 北票市| 中山市| 寿阳县| 子长县| 米泉市| 华亭县| 遵义市| 璧山县|