這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
介紹
Go是Google開發的一種編譯型,可平行化,並具有記憶體回收功能的程式設計語言。
羅布·派克(Rob Pike),羅伯特·格瑞史莫(Robert Griesemer),及肯·湯普遜(unix的創造者)於2007年9月開始設計Go語言,稍後Ian Lance Taylor, Russ Cox加入項目中。Go語言是基於Inferno作業系統所開發的。Go語言於2009年11月正式宣布推出,成為開放原始碼項目,並在Linux及Mac OS X平台上進行了實現,後追加Windows系統下的實現。
描述
Go語言的文法接近C語言,但是對於變數的聲明是不同的,其他文法不同之處是For迴圈和if判斷語句不需要用小括弧括起來。Go語言支援記憶體回收功能。Go語言的並行模型是以東尼·霍爾的通訊順序進程(CSP)為基礎,採取類似模型的其他語言套件括Occam和Limbo,但它也具有Pi運算的特徵,比如通道傳輸。
與C++相比,Go語言並不包括如異常處理、繼承、泛型、斷言、虛函數等功能,但增加了slice型、並發、渠道、記憶體回收、介面(interface)等特性的語言級支援。當然,Google對於泛型的態度還是很開放的,但在該語言的常見問題列表中,對於斷言的存在,則持負面態度,同時也為自己不提供類型繼承來辯護。不同於Java,Go語言內嵌了關聯陣列(也稱為雜湊表(hashes)或字典(dictionaries)),就像字串類型一樣。
go語言已經有了不少的優秀項目,如現在流行的docker就是用golang編寫的。推薦一個連結瞭解更多http://www.open-open.com/lib/view/open1396063913278.html
安裝配置
下載
https://golang.org/dl/
環境變數
GOROOT
PATH win32: %GOROOT%/bin
linux: $GOROOT/bin
推薦編輯器vim
推薦IDE: LiteIDE
程式樣本
HelloWorld!
package mainimport "fmt"func main() {fmt.Println("Hello, World")}
goroutine多線程並行
// goroutine project main.gopackage mainimport ("fmt")func f(from string){for i := 0;i<3;i++{fmt.Println(from,":",i)}}func main() {f("direct")go f("goroutine")go func(msg string){fmt.Println(msg)}("going")var input stringfmt.Scanln(&input)fmt.Println("done")}
運行結果:
golang調用系統命令echo helloworld
package mainimport ( "fmt" "os/exec" "sync" "strings")func exe_cmd(cmd string, wg *sync.WaitGroup) { fmt.Println(cmd) parts := strings.Fields(cmd) out, err := exec.Command(parts[0],parts[1]).Output() if err != nil { fmt.Println("error occured") fmt.Printf("%s", err) } fmt.Printf("%s", out) wg.Done()}func main() { wg := new(sync.WaitGroup) commands := []string{"echo HelloWorld"} for _, str := range commands { wg.Add(1) go exe_cmd(str, wg) } wg.Wait()}