go語言主機 go語言代碼

如何使用Go語言實現遠程執行命令

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

我們提供的服務有:成都網站建設、成都網站制作、微信公眾號開發、網站優化、網站認證、章貢ssl等。為上千家企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的章貢網站制作公司

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

}

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

執行,命令獲取結果

連接成功后,執行命令很簡單

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")

}

上面代碼運行之后,雖然命令正常執行了,但是沒有正常輸出的結果,也沒有異常輸出的結果。 要想顯示結果,需要將 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")

}

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

交互式命令

上面的方式無法遠程執行交互式命令,比如 top , 遠程編輯一個文件,比如 vi /etc/nginx/nginx.conf如果要支持交互式的命令,需要當前的terminal來接管遠程的 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語言調用智能合約

智能合約調用是實現一個 DApp 的關鍵,一個完整的 DApp 包括前端、后端、智能合約及區塊 鏈系統,智能合約的調用是連接區塊鏈與前后端的關鍵。

我們先來了解一下智能合約調用的基礎原理。智能合約運行在以太坊節點的 EVM 中。因此要 想調用合約必須要訪問某個節點。

以后端程序為例,后端服務若想連接節點有兩種可能,一種是雙 方在同一主機,此時后端連接節點可以采用 本地 IPC(Inter-Process Communication,進 程間通信)機制,也可以采用 RPC(Remote Procedure Call,遠程過程調用)機制;另 一種情況是雙方不在同一臺主機,此時只能采用 RPC 機制進行通信。

提到 RPC, 讀者應該對 Geth 啟動參數有點印象,Geth 啟動時可以選擇開啟 RPC 服務,對應的 默認服務端口是 8545。。

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

智能合約的運行過程是后端服務連接某節點,將 智能合約的調用(交易)發送給節點,節點在驗證了交易的合法性后進行全網廣播,被礦工打包到 區塊中代表此交易得到確認,至此交易才算完成。

就像數據庫一樣,每個區塊鏈平臺都會提供主流 開發語言的 SDK(Software Development Kit,軟件開發工具包),由于 Geth 本身就是用 Go 語言 編寫的,因此若想使用 Go 語言連接節點、發交易,直接在工程內導入 go-ethereum(Geth 源碼) 包就可以了,剩下的問題就是流程和 API 的事情了。

總結一下,智能合約被調用的兩個關鍵點是節點和 SDK。

由于 IPC 要求后端與節點必須在同一主機,所以很多時候開發者都會采用 RPC 模式。除了 RPC,以太坊也為開發者提供了 json- rpc 接口,本文就不展開討論了。

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

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

最好能將 calldemo.abi 單獨保存在一個目錄下,輸入“ls”命令只能看到 calldemo.abi 文件,參 考效果如下:

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

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

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

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

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

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

步驟 04:設置 go mod,以便工程自動識別。

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

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

接下來設置 module 生效和 GOPROXY,命令如下:

在項目工程內,執行初始化,calldemo 可以自定義名稱。

步驟 05:運行代碼。執行代碼,將看到下面的效果,以及最終輸出的 2020。

上述輸出信息中,可以看到 Go 語言會自動下載依賴文件,這就是 go mod 的神奇之處。看到 2020,相信讀者也知道運行結果是正確的了。

go是什么編程語言?主要應用于哪些方面?

Go語言由Google公司開發,并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發編程,性能堪比C語言,開發效率肩比Python,被譽為“21世紀的C語言”。

Go語言在云計算、大數據、微服務、高并發領域應用應用非常廣泛。BAT大廠正在把Go作為新項目開發的首選語言。

Go語言能干什么?

1、服務端開發:以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統、監控系統等;

2、DevOps:運維生態中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發;

3、網絡編程:大量優秀的Web框架如Echo、Gin、Iris、beego等,而且Go內置的 net/http包十分的優秀;

4、Paas云平臺領域:Kubernetes和Docker Swarm等;

5、分布式存儲領域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;

6、區塊鏈領域:區塊鏈里面有兩個明星項目以太坊和fabric都使用Go語言;

7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實現的;

8、爬蟲及大數據:Go語言天生支持并發,所以十分適合編寫分布式爬蟲及大數據處理。

組件分享之后端組件——基于Go語言的HTML和CSS網站生成器Hugo

近期正在探索前端、后端、系統端各類常用組件與工具,對其一些常見的組件進行再次整理一下,形成標準化組件專題,后續該專題將包含各類語言中的一些常用組件。歡迎大家進行持續關注。

本節分享一個基于Go語言的HTML和CSS網站生成器 hugo ,它針對速度、易用性和可配置性進行了優化。Hugo 獲取一個包含內容和模板的目錄,并將它們呈現為一個完整的 HTML 網站。Hugo 依賴于 Markdown 文件和元數據的前端,你可以從任何目錄運行 Hugo。這適用于您沒有特權帳戶的共享主機和其他系統。例如我們日常編寫一些博客文章,進行快速生成一套靜態頁面進行分享時可以使用它來進行生成一套靜態頁面作為我們的博客部署基礎。

它支持大量的主題模板,我們可以通過 進行選擇相關的主題使用,有興趣的小伙伴可以進行深入研究一下

當前標題:go語言主機 go語言代碼
鏈接分享:http://m.kartarina.com/article0/dodsdio.html

成都網站建設公司_創新互聯,為您提供品牌網站建設電子商務手機網站建設網站導航關鍵詞優化全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計
主站蜘蛛池模板: 久久久久亚洲av无码专区| 无码喷水一区二区浪潮AV| 久久久久亚洲av无码专区导航| 中文字幕无码毛片免费看| 国产精品无码A∨精品影院| 精品少妇无码AV无码专区| 精品亚洲av无码一区二区柚蜜| 亚洲精品国产日韩无码AV永久免费网| 国产精品午夜福利在线无码 | 久久久久亚洲AV无码专区桃色| 少妇无码太爽了不卡在线观看| 无码性午夜视频在线观看| 国产精品成人无码免费| av无码免费一区二区三区| 一夲道无码人妻精品一区二区| 国产av永久无码天堂影院| 67194成是人免费无码| 国产AV无码专区亚洲AVJULIA| 亚洲另类无码专区首页| 色AV永久无码影院AV| 国产日韩AV免费无码一区二区三区| 国产AV无码专区亚洲AV毛网站 | 在线高清无码A.| 亚洲AV成人无码网天堂| 久久精品九九热无码免贵 | 国产免费黄色无码视频| 亚洲中文字幕久久精品无码A| 亚洲AV永久无码精品水牛影视| 亚洲av无码成人精品区在线播放| 999久久久无码国产精品| 日韩国产精品无码一区二区三区 | 亚洲成AV人片在线播放无码| H无码精品3D动漫在线观看| 无码的免费不卡毛片视频| 妖精色AV无码国产在线看| 日韩电影无码A不卡| 免费VA在线观看无码| 国产日韩精品无码区免费专区国产 | 精品无码成人网站久久久久久| 亚洲AV无码成人精品区日韩| 亚州AV综合色区无码一区|