導航:首頁 > 源碼編譯 > go語言交叉編譯可以執行嗎

go語言交叉編譯可以執行嗎

發布時間:2022-07-26 06:16:03

『壹』 如何使用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語言的優勢有哪些

1. 部署簡單
Go
編譯生成的是一個靜態可執行文件,除了glibc外沒有其他外部依賴。這讓部署變得異常方便:目標機器上只需要一個基礎的系統和必要的管理、監控工具,完全不需要操心應用所需的各種包、庫的依賴關系,大大減輕了維護的負擔。
2. 並發性好
Goroutine和channel使得編寫高並發的服務端軟體變得相當容易,很多情況下完全不需要考慮鎖機制以及由此帶來的各種問題。單個Go應用也能有效的利用多個CPU核,並行執行的性能好。
3. 良好的語言設計
從學術的角度講Go語言其實非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go的設計是非常優秀的:規范足夠簡單靈活,有其他語言基礎的程序員都能迅速上手。更重要的是
Go 自帶完善的工具鏈,大大提高了團隊協作的一致性。
4. 執行性能好
雖然不如 C 和 Java,但相比於其他編程語言,其執行性能還是很好的,適合編寫一些瓶頸業務,內存佔用也非常省。

『叄』 windows 怎麼編譯 go語言

1、解壓壓縮包到go工作目錄,如解壓到E:\opensource\go\go,解壓後的目錄結構如下:

E:\opensource\go\go
├─api
├─bin
│ ├─go.exe
│ ├─godoc.exe
│ └─gofmt.exe
├─doc
├─include
├─lib
├─misc
├─pkg
├─src
└─test

2、增加環境變數GOROOT,取值為上面的go工作目錄
3、Path環境變數中添加";%GOROOT%\bin",以便能夠直接調用go命令來編譯go代碼,至此go編譯環境就配置好了
註:如果不想手動設置系統環境變數,也可下載go啟動環境批處理附件,
修改goenv.bat文件中的GOROOT值為上面的go工作目錄後直接雙擊該bat文件,go編譯環境變數即設置完成。
4、測試go編譯環境,啟動一個cmd窗口,直接輸入go,看到下面的提示就是搭建成功了

E:\opensource\go\go>go
Go is a tool for managing Go source code.

Usage:

go command [arguments]

The commands are:

build compile packages and dependencies
clean remove object files
doc run godoc on package sources
env print Go environment information
fix run go tool fix on packages
fmt run gofmt on package sources
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet run go tool vet on packages

Use "go help [command]" for more information about a command.

Additional help topics:

gopath GOPATH environment variable
packages description of package lists
remote remote import path syntax
testflag description of testing flags
testfunc description of testing functions

Use "go help [topic]" for more information about that topic.

5、編譯helloworld測試程序,go語言包中test目錄帶有helloworld.go測試程序,源碼見"附一 helloworld.go",
直接調用"go build helloworld.go"就生成了"helloworld.exe"可執行程序,運行一下這個程序看到了我們期望的hello,wolrd。

E:\opensource\go\go\test>go build helloworld.go

E:\opensource\go\go\test>helloworld.exe
hello, world

E:\opensource\go\go\test>

附一 helloworld.go

// cmpout

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test that we can do page 1 of the C book.

package main

func main() {
print("hello, world\n")
}

『肆』 可以用go語言成功執行shutdown命令嗎怎麼做

import(
"bytes"
"fmt"
"os/exec"
)

funcexec_shell()(string,error){
//函數返回一個*Cmd,用於使用給出的參數執行name指定的程序
cmd:=exec.Command("shutdown","-h","now")

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

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

funcmain(){
ifresult,err:=exec_shell();err!=nil{
fmt.Println("error:",err)
}else{
fmt.Println("execsucc",result)
}
}

『伍』 go語言開發的程序能直接在windows平台運行嗎

go語言和C++一樣是編譯型語言,開發的程序可以直接在運行

『陸』 Go語言的支持平台

LiteIDE是一款專門為Go語言開發的跨平台輕量級集成開發環境(IDE),由QT編寫。
LiteIDE主要特點: 支持主流操作系統
Windows
Linux
MacOS X Go編譯環境管理和切換
管理和切換多個Go編譯環境
支持Go語言交叉編譯 與Go標准一致的項目管理方式
基於GOPATH的包瀏覽器
基於GOPATH的編譯系統
基於GOPATH的Api文檔檢索 Go語言的編輯支持
類瀏覽器和大綱顯示
Gocode(代碼自動完成工具)的完美支持
Go語言文檔查看和Api快速檢索
代碼表達式信息顯示F1
源代碼定義跳轉支持F2
Gdb斷點和調試支持
gofmt自動格式化支持 其他特徵
支持多國語言界面顯示
完全插件體系結構
支持編輯器配色方案
基於Kate的語法顯示支持
基於全文的單詞自動完成
支持鍵盤快捷鍵綁定方案
Markdown文檔編輯支持
實時預覽和同步顯示
自定義CSS顯示
可導出HTML和PDF文檔
批量轉換/合並為HTML/PDF文檔 Sublime Text 2(以下簡稱Sublime)+ GoSublime + gocode + MarGo的組合。
其優點有: 自動化提示代碼。 保存的時候自動格式化代碼,讓您編寫的代碼更加美觀,符合Go的標准。 支持項目管理 支持語法高亮 熟悉Java的讀者應該對於idea不陌生,idea是通過一個插件來支持go語言的高亮語法,代碼提示和重構實現。

『柒』 go語言的main執行完之後go還會執行嗎

不會執行了,主進程結束以後,子的都會結束

『捌』 Go語言怎麼交叉編譯別的機器或系統的可執行文件

windows下面用以下代碼,最好放一個bat文件里.[mw_shl_code=applescript,true]set GOROOT=c:\mygoset GOOS=windowsset GOARCH=386set GOPATH=c:\mygopathset PATH=%PATH%;c:\mingw\bin;%GOROOT%\bincd %GOPATH%\src[/mw_shl_code]

『玖』 go語言是,運行在虛擬機里的嗎

我們這個世界真的需要另外一種C語言風格的編程語言嗎?很顯然,谷歌很早就這么認為了,在 2009 年,它借用雷蒙斯樂隊的歌「Hey!Ho!Let』s Go」,正式推出了 Go 語言。現在 Go 語言開發團隊已經開發出了這種語言的第一個穩定版本,他們稱之為 Go 1,他們將這種語言推向世界,希望人們用這種語言「開發出健壯的軟體產品和作品。」那麼,現在人們對這種語言的使用情況又是如何呢?讓我們先回顧一下,什麼是 Go 語言,是什麼促使谷歌決定推出這樣一種語言?按 Go 語言的「常見問題」里的說法,自從那個「重要的系統級編程語言」誕生距今已超過十幾年了,這段時間計算機世界已經發生了很大的變化。谷歌的才人們對目前現有的各種語言深感失望,他們必須要在「快速的編譯、快速的執行或簡單編程」之間做出選擇。「沒有一種主流的編程語言,例如C,C++,Java,Python 等,能提供谷歌人想要的全部特徵。於是,谷歌的工程師從 2007 年起開始開發 Go 語言。「常見問題」里這樣說:Go 語言在基本語法上」基本上屬於C語言家族「,但它從 Pascal 語系吸收了」大量的理念「,還有一些思想是來自其它的語言。但對於程序員來說,應該把它當成一種全新的語言,一種以」讓程序員更有效率,讓編程更有效率,至少是讓我們更有效率並且使編程更有樂趣「的理念為設計目標的編程語言。Go 語言擅長做什麼…?那麼,Go 語言擅長做什麼?根據谷歌著名的軟體工程師——Go 語言的設計人之一——Rob Pike 的說法,它是用來開發」大型軟體「的。Pike 說 Go 語言適合於」很多程序員一起開發的大型軟體,並且開發周期較長,支持雲計算的網路服務:簡言之,就是服務端軟體。Go 語言能夠讓程序員快速開發,並且在軟體不斷的增長過程中,它能讓程序員更容易地進行維護和修改。它融合了傳統編譯型語言的高效性和腳本語言的易用性和富於表達性。「(作為原貝爾實驗室 Unix 開發小組成員,Pike 對系統軟體有相當的認識。)但對於其它類型的軟體,Go 語言也一樣的好用。例如,我在 Google+ 上詢問了 Go 語言的使用者,得到了 Douglas Fils 的回復,他正在拿各種語言做實驗。Fils 說他現在有時會開發一些 Web 應用程序,大多數都是在 Java 虛擬機(JVM)平台上。「所以 Java 自然是最常用的。我最近開始嘗試更多的語言,例如 Scala 和 Groovy。我用 Groovy 語言已經開發了不少的東西,而且剛剛完成了一個 Groovy/Grails 語言上的大型項目。我還研究了一下 Ruby on Rails/Python (Python 框架),並用它們做了一些東西。」他說他用早期版本的 Go 語言開發了一個 Web 界面來處理數據資源。但很不幸。「當時的 Go 的程序庫和語法使得開發起來很困難。我還嘗試了 node.js,而且,到了一月份,我的精力完全轉向了 node.js.」Node.js,Fils 說,很流行,「雖然我很喜歡它,但它的單線程事件循環機制和非阻塞的編程模式讓我不太滿意。還有,所有的東西都要用 Javascript 的回調函數,我不喜歡這樣。」很顯然,他不是一個 JavaScript 的粉絲。Go 語言的語法和結構,從另一方面講,「還是很簡潔的。」當Go 語言的語法和結構趨於穩定,並發布了 Go 1 時,他覺得應該轉回來,重寫他的 Go 語言程序。這回,他想起來了當初為什麼想用 Go 來開發。關於Go 語言的爭論Fils 說,在 Java 里,很多東西都需要有一定的模板套路,這是很討厭。他說 Scala 和 groovy 要好一些,但仍然是個問題。Go 語言給人的感覺像一個動態的類型化語言,Fils 說,但 Go 語言里靜態類型特徵並不像 Java 里那樣明顯。Go 語言的垃圾收集管理,比 JVM 要好的多。跟 Groovy 這樣的動態語言比起來尤其能看出這點。Fils 在評論中說 Go 語言的速度比其它語言快很多倍。它運行速度快但不影響負載量。它編譯所需的時間很短,他在開發時能邊開發邊編譯,就像動態語言那樣迅速。最後,他說使用 Go 語言要比使用 Node.js,Java 或以 Java 為基礎的語言,Ruby on Rails 等語言要有趣的多。在開發 JVM 平台上的應用時,我總感覺自己是一個系統管理員,而不是一個開發者。我要修改堆空間,我要研究負載均衡或內存問題或其它的資源管理問題。而使用 Go 語言,我不需要考慮這些。我開發,編譯,測試,運行,部署,非常的享受。請注意,並不是所有的人都喜歡 Go 語言。你可以看一看 Shaneal Manek 的關於 Go 語言的垃圾收集系統以及腳本語言和編譯型語言之間比較的評論。Go 語言能走向主流嗎?你的期望是什麼?按照 RedMonk』s Stephen O』Grady 的說法,對於 Go 語言來說現在還非常年輕。通常,程序員會分成兩個陣營:要麼歡迎底層語言和腳本型/垃圾收集器型語言的融合,要麼是反對這樣做。對於後者,毫無意外的,他們是C語言的堅定擁護者。圍繞著 Go 語言有很多的爭論,這不令人吃驚,任何一種語言都是這樣。而令人吃驚的是目前 Go 語言在程序員中獲得了相當的吸引力。O』Grady 二月份在 RedMonk 編程語言分級中把 Go 語言放入了第二梯隊。但是,他說,考慮一下 Go 語言是如此的年輕,「即使是目前這種成績也是讓人相當的印象深刻了。」谷歌已經發布了 Go 語言的穩定版本,並且在 Google App Engine 支持部署這種語言的應用,這將給 Go 語言帶來更多的吸引力。Go 語言能否成為一種「主流」語言,這需要由時間來判定。不過,看起來除谷歌之外還有很多公司對這種語言也很感興趣,比如 Engine Yard 等公司。那些對目前的現存的語言不太滿意的程序員大概對 Go 語言都在拭目以待。如果你在使用 Go 語言或之前簡單涉略過它,你需要注意,Go 1 版引入了不少的變化。然而從 Go 1 版開始,Go 語言的變化將會遵循它的規格說明書進行。根據 Go 語言的開發人員的透露,「也許在某個時間,我們會推出 Go 2 的規范,但在此之前,用 Go 語言編寫的程序在今後的 Go 1 版本(Go 1.1, Go 1.2 等)上都能正確的運行。」你用Go 語言開發過什麼項目嗎?

閱讀全文

與go語言交叉編譯可以執行嗎相關的資料

熱點內容
程序員看不懂怎麼辦 瀏覽:271
linux操作系統題 瀏覽:765
單片機無符號數加法 瀏覽:227
應用隱藏加密怎麼關閉 瀏覽:269
汽車空調的壓縮機電線有什麼用 瀏覽:429
電腦加密圖片如何取消加密 瀏覽:340
慧凈電子51單片機視頻 瀏覽:343
javamap賦值 瀏覽:165
什麼app可以玩掌機游戲 瀏覽:46
java簡單聊天室 瀏覽:462
通用汽車編程軟體 瀏覽:432
一級抗震框架梁箍筋加密區規定是多少 瀏覽:974
教你如何把安卓手機變成蘋果 瀏覽:11
app編譯分類 瀏覽:323
怎麼用伺服器的資源包 瀏覽:199
oa軟體手機登陸伺服器地址 瀏覽:289
androidrtp打包 瀏覽:723
信息被加密碼了怎麼辦 瀏覽:420
彈出光碟命令 瀏覽:517
kdj公式源碼分享 瀏覽:355