go語言執行系統命令 go語言 運行

go語言命令行打印清除

命令如下:

萊山網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、響應式網站設計等網站項目制作,到程序開發,運營維護。創新互聯于2013年成立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯

直接在終端中輸入gohelp即可顯示所有的go命令以及相應命令功能簡介,主要有下面這些:

build:編譯包和依賴;clean:移除對象文件;doc:顯示包或者符號的文檔;env:打印go的環境信息;bug:啟動錯誤報告;fix:運行gotoolfix;fmt:運行gofmt進行格式化;generate:從processingsource生成go文件

get:下載并安裝包和依賴;install:編譯并安裝包和依賴;list:列出包;run:編譯并運行go程序;test:運行測試;tool:運行go提供的工具;version:顯示go的版本;vet:運行gotoolvet;命令的使用方式為:gocommand[args],除此之外,可以使用gohelp;來顯示指定命令的更多幫助信息。;在運行gohelp時,不僅僅打印了這些命令的基本信息,還給出了一些概念的幫助信息:;c:Go和c的相互調用;buildmode:構建模式的描述;filetype:文件類型;gopath:GOPATH環境變量

environment:環境變量;importpath:導入路徑語法;packages:包列表的描述;testflag:測試符號描述;testfunc:測試函數描述等。

可以用go語言成功執行shutdown命令嗎?怎么做

import?(

"bytes"

"fmt"

"os/exec"

)

func?exec_shell()?(string,?error){

//函數返回一個*Cmd,用于使用給出的參數執行name指定的程序

cmd?:=?exec.Command("shutdown",?"-h","now")

//讀取io.Writer類型的cmd.Stdout,再通過bytes.Buffer(緩沖byte類型的緩沖器)將byte類型轉化為string類型(out.String():這是bytes類型提供的接口)

var?out?bytes.Buffer

cmd.Stdout?=?out

//Run執行c包含的命令,并阻塞直到完成。??這里stdout被取出,cmd.Wait()無法正確獲取stdin,stdout,stderr,則阻塞在那了

err?:=?cmd.Run()

return?out.String(),?err

}

func?main(){

if?result,err:=exec_shell();err!=nil{

fmt.Println("error:",err)

}else{

fmt.Println("exec?succ?",?result)

}

}

一學就會,手把手教你用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語言運行32位

第一種

1.使用go env命令,查看系統的配置環境,可以看到GOARCH(當前系統)是amd64

2.執行 set GOARCH=386 配置go輸出系統平臺為32位,此時再用go env命令查看系統的配置環境,如圖:

第二種

打開Run Edit Configurations Configuration標簽

為Environment添加兩個設置項

參考

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

一般命令

所謂一般命令,就是在一定時間內會執行完的命令。比如 grep, cat 等等。 執行命令的步驟是:連接,執行,獲取結果

連接

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

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語言命令行利器cobra使用教程

cobra是一個提供簡單接口來創建強大的現代CLI界面的庫類似git git tools,cobra也是一個應用程序,它會生成你的應用程序的腳手架來快速開發基于cobra的應用程序

cobra提供:

cobra建立在命令、參數、標志的結構之上

commands代表動作,args是事物,flags是動作的修飾符

最好的應用程序在使用時讀起來就像句子,因此,用戶直觀地知道如何與它們交互

模式如下:APPNAME VERB NOUN --ADJECTIVE. or APPNAME COMMAND ARG --FLAG(APPNAME 動詞 名詞 形容詞 或者 APPNAME 命令 參數 標志)

一些真實世界的好例子可以更好地說明這一點

kubectl 命令更能體現APPNAME 動詞 名詞 形容詞

如下的例子,server 是command,port是flag

這個命令中,我們告訴git 克隆url

命令是應用程序的中心點,應用程序支持的每一個交互都包含在一個命令中,命令可以有子命令,也可以運行操作

在上面的例子中,server是命令

更多關于cobra.Command

flag是一種修改命令行為的方式,cobra支持完全兼容POSIX標志,也支持go flag package,cobra可以定義到子命令上的標志,也可以僅對該命令可用的標志

在上面的命令中,port是標志

標志的功能由 pflag library 提供,pflag library是flag標準庫的一個分支,在添加POSIX兼容性的同時維護相同的接口。

使用cobra很簡單,首先,使用go get按照最新版本的庫,這個命令會安裝cobra可執行程序以及庫和依賴項

下一步,引入cobra到應用程序中

雖然歡迎您提供自己的組織,但通常基于Cobra的應用程序將遵循以下組織結構:

在Cobra應用程序中,main.go文件通常非常簡單。它有一個目的:初始化Cobra。

使用cobra生成器

cobra提供了程序用來創建你的應用程序然后添加你想添加的命令,這是將cobra引入應用程序最簡單的方式

這兒 你可以發現關于cobra的更多信息

要手動實現cobra,需要創建一個main.go 和rootCmd文件,可以根據需要提供其他命令

Cobra不需要任何特殊的構造器。只需創建命令。

理想情況下,您可以將其放在app/cmd/root.go中:

在init()函數中定義標志和處理配置

例子如下,cmd/root.go:

創建main.go

使用root命令,您需要讓主函數執行它。為清楚起見,Execute應該在根目錄下運行,盡管它可以在任何命令上調用。

在Cobra應用程序中,main.go文件通常非常簡單。它有一個目的:初始化Cobra。

可以定義其他命令,通常每個命令在cmd/目錄中都有自己的文件。

如果要創建版本命令,可以創建cmd/version.go并用以下內容填充它:

如果希望將錯誤返回給命令的調用者,可以使用RunE。

然后可以在execute函數調用中捕獲錯誤。

標志提供修飾符來控制操作命令的操作方式。

由于標志是在不同的位置定義和使用的,因此我們需要在外部定義一個具有正確作用域的變量來分配要使用的標志。

有兩種不同的方法來分配標志。

標志可以是“持久”的,這意味著該標志將可用于分配給它的命令以及該命令下的每個命令。對于全局標志,在根上指定一個標志作為持久標志。

也可以在本地分配一個標志,該標志只應用于該特定命令。

默認情況下,Cobra只解析目標命令上的本地標志,而忽略父命令上的任何本地標志。通過啟用Command.TraverseChildren,Cobra將在執行目標命令之前解析每個命令上的本地標志。

使用viper綁定標志

在本例中,持久標志author與viper綁定。注意:當用戶未提供--author標志時,變量author將不會設置為config中的值。

更多關于 viper的文檔

Flags默認是可選的,如果希望命令在未設置標志時報告錯誤,請根據需要進行標記:

持久性Flags

可以使用命令的Args字段指定位置參數的驗證。

內置了以下驗證器:

在下面的示例中,我們定義了三個命令。兩個是頂級命令,一個(cmdTimes)是頂級命令之一的子命令。在這種情況下,根是不可執行的,這意味著需要一個子命令。這是通過不為“rootCmd”提供“Run”來實現的。

我們只為一個命令定義了一個標志。

有關標志的更多文檔,請訪問

對于一個更完整的例子更大的應用程序,請檢查 Hugo 。

當您有子命令時,Cobra會自動將help命令添加到應用程序中。當用戶運行“應用程序幫助”時,將調用此函數。此外,help還支持所有其他命令作為輸入。例如,您有一個名為“create”的命令,沒有任何附加配置;調用“app help create”時,Cobra將起作用。每個命令都會自動添加“-help”標志。

以下輸出由Cobra自動生成。除了命令和標志定義之外,不需要任何東西。

幫助就像其他命令一樣。它周圍沒有特殊的邏輯或行為。事實上,你可以提供你想提供的。

您可以為默認命令提供自己的幫助命令或模板,以用于以下功能:

當用戶提供無效的標志或無效的命令時,Cobra通過向用戶顯示“用法”來響應。

你可以從上面的幫助中認識到這一點。這是因為默認幫助將用法作為其輸出的一部分嵌入。

您可以提供自己的使用函數或模板供Cobra使用。與幫助一樣,函數和模板也可以通過公共方法重寫:

如果在root命令上設置了version字段,Cobra會添加一個頂級的'--version'標志。運行帶有“-version”標志的應用程序將使用版本模板將版本打印到標準輸出。可以使用cmd.SetVersionTemplate(s string)函數自定義模板。

可以在命令的主運行函數之前或之后運行函數。PersistentPreRun和PreRun函數將在運行之前執行。PersistentPostRun和PostRun將在運行后執行。如果子函數不聲明自己的函數,則它們將繼承Persistent*Run函數。這些函數按以下順序運行:

輸出:

當發生“未知命令”錯誤時,Cobra將打印自動建議。這使得Cobra在發生拼寫錯誤時的行為類似于git命令。例如:

基于注冊的每個子命令和Levenshtein距離的實現,建議是自動的。匹配最小距離2(忽略大小寫)的每個已注冊命令都將顯示為建議。

如果需要在命令中禁用建議或調整字符串距離,請使用:

or

您還可以使用SuggestFor屬性顯式設置將為其建議給定命令的名稱。這允許對在字符串距離方面不接近的字符串提供建議,但在您的一組命令中是有意義的,并且對于某些您不需要別名的字符串。例子:

Cobra可以基于子命令、標志等生成文檔。請在 docs generation文檔 中閱讀更多關于它的信息。

Cobra可以為以下shell生成shell完成文件:bash、zsh、fish、PowerShell。如果您在命令中添加更多信息,這些補全功能將非常強大和靈活。在 Shell Completions 中閱讀更多關于它的信息。

Cobra is released under the Apache 2.0 license. See LICENSE.txt

本文題目:go語言執行系統命令 go語言 運行
文章URL:http://m.kartarina.com/article24/hgseje.html

成都網站建設公司_創新互聯,為您提供外貿建站營銷型網站建設外貿網站建設自適應網站品牌網站制作關鍵詞優化

廣告

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

微信小程序開發
主站蜘蛛池模板: 亚洲AV综合色区无码另类小说| 亚洲乱亚洲乱少妇无码| 无码国内精品人妻少妇蜜桃视频| 亚洲国产精品无码AAA片| 人妻中文字幕无码专区| 国产精品第一区揄拍无码| 国产成人无码区免费网站| 精品日韩亚洲AV无码一区二区三区| 成人免费无码大片A毛片抽搐色欲 成人免费无码大片a毛片 | 国产成人无码18禁午夜福利p| 少妇无码AV无码专区在线观看| 国产精品无码一区二区在线观| 性无码一区二区三区在线观看| 无码一区二区三区在线| 亚洲av无码国产综合专区| 国产福利电影一区二区三区久久老子无码午夜伦不| 亚洲精品无码久久久久去q| 国产精品爆乳奶水无码视频| 日韩AV无码中文无码不卡电影| 亚洲人成无码www久久久| 少妇爆乳无码专区| 18禁无遮拦无码国产在线播放| 亚洲精品无码永久在线观看你懂的| 国产精品午夜无码AV天美传媒| 精品视频无码一区二区三区| 亚洲AV无码乱码国产麻豆 | 亚洲av永久无码精品古装片| 成人无码一区二区三区| 国产精品第一区揄拍无码| 少妇特殊按摩高潮惨叫无码| 无码午夜人妻一区二区三区不卡视频| 久久久无码精品亚洲日韩按摩 | 日日日日做夜夜夜夜无码| 永久免费av无码网站大全| 亚洲精品无码久久久久秋霞| 久久国产亚洲精品无码| 久久综合精品国产二区无码| 精品无码一区二区三区亚洲桃色| 久久午夜无码鲁丝片| 亚洲一区二区三区无码国产| 亚洲AV永久无码天堂影院|