1.Robert Griesemer: 參與開發 Java HotSpot 虛擬機
2.Rob Pike: Go 語言項目總負責人,貝爾實驗室 Unix 團隊成員
3.Ken Thompson:貝爾實驗室 Unix 團隊成員,C語言創始人之一
4.Russ Cox:加入開發團隊後着手語言和類庫方面的開發,也就是 Go 語言的標準包
linux
1.快速編譯
2.高效執行
3.易於開發
golang
1.多態性:經過接口(interface)實現
2.靜態類型:類型安全
3.支持交叉編譯
4.徹底支持UTF-8的編程語言
編程
1.不支持函數重載和操做符重載
2.不支持隱式轉換(讓全部的東西都顯式)
3.經過另外一種途徑實現面向對象設計來放棄類和類型的繼承
4.儘管在接口的使用方面能夠實現相似變體類型的功能,但自己不支持變體類型
5.不支持動態加載代碼
6.不支持動態連接庫
7.不支持泛型
8.經過 recover 和 panic 來替代異常機制
9.不支持靜態變量
windows
1.Linux
2.FreeBSD
3.Mac OS X
後端
1.原生編譯器 gc
1.1 若是使用一個有不一樣指令集的編譯器來構建 Go 程序,就須要針對操做系統和處理器架構(32 位操做系統或 64 位操做系統)進行區別對待
1.2 使用非分代、無壓縮和並行的方式進行編譯,它的編譯速度要比 gccgo 更快,產生更好的本地代碼,但編譯後的程序不可以使用 gcc 進行連接
1.3 標記(Flags) 是指能夠經過命令行設置可選參數來影響編譯器或連接器的構建過程或獲得一個特殊的目標結果
1.3.1 -I 針對包的目錄搜索
1.3.2 -d 打印聲明信息
1.3.3 -e 不限制錯誤打印的個數
1.3.4 -f 打印棧結構
1.3.5 -h 發生錯誤時進入恐慌(panic)狀態
1.3.6 -o 指定輸出文件名
1.3.7 -S 打印產生的彙編代碼
1.3.8 -V 打印編譯器版本
1.3.9 -u 禁止使用 unsafe 包中的代碼
1.3.10 -w 打印歸類後的語法解析樹
1.3.11 -x 打印 lex tokens
api
2.非原生編譯器 gccgo
一款相對於 gc 而言更加傳統的編譯器,使用 GCC 做爲後端。GCC 是一款很是流行的 GNU 編譯器,它可以構建基於衆多處理器架構的應用程序。編譯速度相對 gc 較慢,但產生的本地代碼運行要稍微快一點。它同時也提供一些與 C 語言之間的互操做性安全
1. 擴展名 .go
2. C 文件使用後綴名 .c,彙編文件使用後綴名 .s。全部的源代碼文件都是經過包(packages)來組織。包含可執行代碼的包文件在被壓縮後使用擴展名 .a
3. Go 語言的標準庫(第 9.1 節)包文件在被安裝後就是使用這種格式的文件。
4. 注意 當你在建立目錄時,文件夾名稱永遠不該該包含空格,而應該使用下劃線 "_" 或者其它通常符號代替
ruby
1. $GOROOT 表示 Go 在你的電腦上的安裝位置,它的值通常都是 $HOME/go,固然,你也能夠安裝在別的地方。
2. $GOARCH 表示目標機器的處理器架構,它的值能夠是 38六、amd64 或 arm。
3. $GOOS 表示目標機器的操做系統,它的值能夠是 darwin、freebsd、linux 或 windows。
4. $GOBIN 表示編譯器和連接器的安裝位置,默認是 $GOROOT/bin,若是你使用的是 Go 1.0.3 及之後的版本,通常狀況下你能夠將它的值設置爲空,Go 將會使用前面提到的默認值。
5. $GOPATH 默認採用和 $GOROOT 同樣的值,但從 Go 1.1 版本開始,你必須修改成其它路徑。
5.1 bin(可執行文件)
5.2 pkg(包文件)
5.3 src(源碼文件)
6. $GOARM 專門針對基於 arm 架構的處理器,它的值能夠是 5 或 6,默認爲 6。
7. $GOMAXPROCS 用於設置應用程序可以使用的處理器個數與核數。
bash
1. 設置 Go 環境變量
1.1 咱們在 Linux 系統下通常經過文件 $HOME/.bashrc 配置自定義環境變量,根據不一樣的發行版也多是文件 $HOME/.profile,而後使用 gedit 或 vi 來編輯文件內容:
網絡
export GOROOT=$HOME/go
複製代碼
1.2 爲了確保相關文件在文件系統的任何地方都能被調用,你還須要添加如下內容:
export PATH=$PATH:$GOROOT/bin
複製代碼
1.3 在開發 Go 項目時,你還須要一個環境變量來保存你的工做目錄。
export GOPATH=$HOME/Applications/Go
複製代碼
1.4.在完成這些設置後,你須要在終端輸入指令:
source .bashrc
複製代碼
以使這些環境變量生效。而後重啓終端,輸入 go env 和 env 來檢查環境變量是否設置正確。
2. 安裝C工具
2.1 Go 的工具鏈是用 C 語言編寫的,所以在安裝 Go 以前你須要先安裝相關的 C 工具。若是你使用的是 Ubuntu 的話,你能夠在終端輸入如下指令( 譯者注:因爲網絡環境的特殊性,你可能須要將每一個工具分開安裝 )。
sudo apt-get install bison ed gawk gcc libc6-dev make
複製代碼
3.獲取 Go 源代碼
3.1 從https://golang.org/dl/ 上下載 Go 的源碼包到你的計算機上,而後將解壓後的目錄 go 經過命令移動到 $GOROOT 所指向的位置
wget https://storage.googleapis.com/golang/go<VERSION>.src.tar.gz<br>
tar -zxvf go<VERSION>.src.tar.gz<br>
sudo mv go $GOROOT<br>
複製代碼
4. 構建 Go
4.1 在終端使用如下指令來進行編譯工做
cd $GOROOT/src
./all.bash
複製代碼
4.2 在完成編譯以後(一般在 1 分鐘之內,若是你在 B 型樹莓派上編譯,通常須要 1 個小時),你會在終端看到以下信息被打印:
README.md,做者,貢獻者,許可
/bin:包含陽離子文件,如:編譯器,Go工具
/doc:包含示例程序,代碼工具,本地文檔等
/lib:包含文檔模版
/misc:包含與支持Go編輯器有關的配置文件以及cgo的示例
/os_arch:包含標準庫的包的對象文件(.a)
/src:包含源代碼編寫腳本和標準庫的包的完整源代碼(Go是一門開源語言)
/src/cmd:包含Go和C的編譯器和命令行腳本
複製代碼
1. 在合適的位置使用打印語句輸出相關變量的值(print/println 和 fmt.Print/fmt.Println/fmt.Printf)。
2. 在 fmt.Printf 中使用下面的說明符來打印有關變量的相關信息
2.1 %+v 打印包括字段在內的實例的完整信息
2.2 %#v 打印包括字段和限定類型名稱在內的實例的完整信息
2.3 %T 打印某個類型的完整說明
3. 使用 panic 語句來獲取棧跟蹤信息(直到 panic 時全部被調用函數的列表)。
4. 使用關鍵字 defer 來跟蹤代碼執行過程。
Go 程序,從 Go 1 版本開始,使用 Go 自帶的更加方便的工具來構建應用程序:
go build 編譯自身包和依賴包
go install 編譯並安裝自身包和依賴包
1. gofmt –w program.go 會格式化該源文件的代碼而後將格式化後的代碼覆蓋原始內容(若是不加參數 -w 則只會打印格式化後的結果而不重寫文件)
2. gofmt -w *.go 會格式化並重寫全部 Go 源文件
3. gofmt map1 會格式化並重寫 map1 目錄及其子目錄下的全部 Go 源文件
4. gofmt 也能夠經過在參數 -r 後面加入用雙引號括起來的替換規則實現代碼的簡單重構,規則的格式:<原始內容> -> <替換內容>
4.1 例1: gofmt -r '(a) -> a' –w *.go
4.2例2: gofmt -r 'a[n:len(a)] -> a[n:]' –w *.go
4.3 例3: gofmt –r 'A.Func1(a,b) -> A.Func2(b,a)' –w *.go
1. go doc package獲取包的文檔註釋,例如:go doc fmt會顯示使用godoc生成的fmt包的文檔註釋。
2. go doc package/subpackage獲取子包的文檔註釋,例如:go doc container/list。
3. go doc package function獲取某個函數在某個包中的文檔註釋,例如:go doc fmt Printf會顯示有關fmt.Printf()的使用說明。
1. go install 是安裝Go包的工具,相似Ruby中的rubygems。主要用於安裝非標準庫的包文件,將源代碼編譯成對象文件。 2. go fix用於將您的Go代碼從舊的發行版遷移到最新的發行版,它主要負責簡單的,重複的,枯燥無味的修改工做,若是像API等複雜的函數修改,工具能夠引用文件名和代碼。Go開發團隊通常也使用這個工具升級Go內置工具以及谷歌內部項目的代碼。go fix之因此可以正常工做是由於Go在標準庫就提供生成抽象語法樹。該工具會嘗試更新當前目錄下的全部Go源文件,並在完成代碼更新後在控制檯輸出相關的文件名。 3. go test 是一個輕量級的單元測試框架。