go源碼編譯2021
『壹』 linux下怎麼安裝Go開發環境
一、Go安裝使用
1、下載Go源碼包
https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz
上傳到/usr/local/src目錄下
2、編譯安裝Go到/usr/local
tar zxvf go1.6.3.linux-amd64.tar.gz -C /usr/local/
#註:必須使用root賬戶或者使用sudo來解壓縮Go源碼包
3、設置PATH環境變數,添加/usr/local/go/bin到環境變數
export PATH=$PATH:/usr/local/go/bin
4、安裝到自定義位置
Go二進制文件默認安裝到/usr/local/go,但是可以安裝Go工具到不同的位置,可以自行定義,只需要設置正確的環境變數。
例如,安裝Go到家目錄下,必須添加環境變數到$HOME/.profile
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
註:安裝Go到其他目錄時,GOROOT必須設置為環境變數
5、檢查是否正確安裝程序
通過設置一個工作區和建立一個簡單的程序,檢查是否正確安裝了一個簡單的程序。創建一個目錄包含您的工作空間,例如/data/work,並設置GOPATH環境變數指向的位置。
export GOPATH=/data/work
#如果不存在/data/work,需要新建
然後,在你的工作內創建src/github.com/user/hello,如果使用github,可以使用自己的用戶名代替user,在hello目錄下,新建hello.go
# cat hello.go
package main
import "fmt"
func main {
fmt.Printf("hello,world!\n")
}
#使用go編譯hello.go
go install github.com/user/hello
#上面的命令講名叫hello(or hello.exe)的程序放到你的工作區內,執行下面命令,會得到輸出結果。
$GOPATH/bin/hello
hello,world!
#當出現hello,world!表明Go已經安裝成功可以工作。
二、Go工作區介紹
1、機構組織代碼概述
Go語言程序通常將所有的代碼保存在一個工作區中。
工作區包含許多版本控制庫(由Git管理)。
每個存儲庫包含一個或多個包。
每個包由一個或多個在一個目錄中的源文件組成。
一個包的目錄的路徑決定其導入路徑。
註:同於其他的編程環境中,每一個項目都有一個獨立的工作區且工作區是緊密聯系在一起的版本控制庫。
2、工作區介紹
工作區是一個目錄層次結構,它的根目錄有三個目錄:
src 包含Go源文件
pkg 包含對象和包
bin 包含可執行命令
Go工具創建源碼包並安裝二進制文件到pkg和bin目錄下
src目錄通常包含多個版本控制庫(如Git或Mercurial),跟蹤一個或多個源包的開發。
下面展示一個好的工作區的例子:
bin/
hello # command executable
outyet # command executable
pkg/
linux_amd64/
github.com/golang/example/
stringutil.a # package object
src/
github.com/golang/example/
.git/ # Git repository metadata
hello/
hello.go # command source
outyet/
main.go # command source
main_test.go # test source
stringutil/
reverse.go # package source
reverse_test.go # test source
golang.org/x/image/
.git/ # Git repository metadata
bmp/
reader.go # package source
writer.go # package source
... (many more repositories and packages omitted) ...
上面的屬性圖展示了一個包含兩個存儲庫(example和image)的工作區,example 存儲庫包含兩個命令(hello,outyet),image庫包含bmp包和幾個其他的包。
一個典型的工作區包含包含許多軟體包和命令的多個源庫。大多數程序員將所有的源代碼和依賴關系保存在一個工作區中
3、GOPATH環境變數設置
GOPATH環境變數指定工作區的位置。它很可能是唯一的環境變數,代碼開發時需要設置。
開始,創建一個工作區目錄並設置相應的gopath。您的工作區可以位於任何你喜歡的地方,但我們將在這個文檔中使用/data/work。請注意,這不能是您的「Go安裝」路徑相同。
mkdir -p /data/work
export GOPATH=/data/work
為了方便。添加工作區的bin到PATH中
export PATH=$PATH:$GOPATH/bin
4、導入路徑
一個導入路徑是唯一標識一個包的字元串。一個包的導入路徑對應於它在工作區內或遠程存儲庫中的位置。
從標准庫的軟體包中給出了短的導入路徑等。對於您自己的包,您必須選擇不可能和未來添加到標准庫或其他外部庫的基礎路徑沖突的路徑。
注意,你不需要將你的代碼發布到一個遠程存儲庫之前,你可以建立它。這只是一個很好的習慣來組織你的代碼,如果你有一天會出版它。在實踐中,你可以選擇任何任意的路徑名稱,只要它是唯一的標准庫和更大的去生態系統。
我們將使用github.com/user作為我們的基本路徑。在您的工作區中創建一個目錄,以保持源代碼:
mkdir -p $GOPATH/src/github.com/user
5、第一個項目
編譯並運行一個簡單的程序,首先選擇一個包的路徑(我們將使用github.com/user/hello)和創建在您的工作區相應的軟體包目錄:
mkdir $GOPATH/src/github.com/user/hello
創建名叫hello.go的文件,上面創建過,此處略過。
cd $GOPATH/src/github.com/user/hello
go install
$GOPATH/bin/hello
或者:
hello
如果你使用的是一個源代碼管理系統,現在是一個很好的時間來初始化一個存儲庫,添加文件,並提交你的第一次更改。再次,這一步是可選的:您不需要使用源代碼管理來寫代碼。
cd $GOPATH/src/github.com/user/hello
git init
Initialized empty Git repository in /data/work/src/github.com/user/hello/.git/
git add hello.go
git commit -m "first commit"
[master (root-commit) bbfb477] first commit
6、first library
mkdir $GOPATH/src/github.com/user/stringutil
下一步,在目錄下創建一個名為reverse.go文件中有下列內容:
// Package stringutil contains utility functions for working with strings.
package stringutil
// Reverse returns its argument string reversed rune-wise left to right.
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
使用go build測試包的編譯
$ go build github.com/user/stringutil
如果當前位置源碼包目錄,只需要:
go build
上面操作並不會產生一個輸出文件,必須使用go install,把包和對象輸出到工作去的pkg目錄內
確認stringutil包創建完成後,修改原始hello.go,使用stringutil包:
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("\n !oG ,olleH"))
}
無論使用go安裝包還是二進制文件,所有相關的依賴都會自動安裝。所以當你安裝hello程序時:
$ go install github.com/user/hello
對應的stringutil包會自動安裝好。
執行新的hello程序,可以看到消息已經被反轉
# hello
Hello, Go!
完成上面操作之後,工作區應該為:
├── bin
│ └── hello # command executable
├── pkg
│ └── linux_amd64 # this will reflect your OS and architecture
│ └── github.com
│ └── user
│ └── stringutil.a # package object
└── src
└── github.com
└── user
├── hello
│ └── hello.go # command source
└── stringutil
└── reverse.go # package source
注意:go install會把庫文件stringutil.a放到pkg/linux_amd64下邊(目錄結構跟源代碼結構一樣)。這樣可以go命令可以直接找到對應的包對象,避免不必要的重復編譯。linux_amd64是為了根據操作系統和你的系統架構交叉編譯。
所有Go可執行程序都通過靜態方式鏈接在一起,所以在運行時是不需要相關的包對象(庫)。
7、包命令
所有的Go源代碼都以下面的語句開始:
package name
其中name就是包引用默認的名稱,一個包中的所有文件必須使用同一個包名,可執行命令必須是main。
一個二進制文件下所有的包名不需要唯一,但是引用路徑必須唯一
8、測試
Go自帶了一個輕量級的測試框架,由go test和testing包組成。
可以通過新建xx_test.go寫一個測試,其中包含若干個TestXXX函數。測試框架會自動執行這些函數;如果函數中包含tError或t.Fail, 對應的測試會被判為失敗。
添加一個針對stringutil的測試文件$GOPATH/src/github.com/user/stringutil/reverse_test.go,包含以下內容:
package stringutil
import "testing"
func TestReverse(t *testing.T) {
cases := []struct {
in, want string
}{
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世,olleH"},
{"", ""},
}
for _, c := range cases {
got := Reverse(c.in)
if got != c.want {
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
}
}
}
#通過go test測試
# go test github.com/user/stringutil
ok github.com/user/stringutil 0.002s
#同樣的,在包文件夾下可以忽略路徑而直接執行go test
[root@zabbix stringutil]# go test
PASS
ok github.com/user/stringutil 0.002s
9、遠程包
包的引用路徑用來描述如何通過版本控制系統獲取包的源代碼。go工具通過引用路徑自動從遠程代碼倉庫獲取包文件。比如本文中用的例子也對應的保存在github.com/golang/example下。go可以通過包的代碼倉庫的url直接獲取、生成、安裝對應的包。
[root@zabbix ~]# go get github.com/golang/example/hello
[root@zabbix ~]# $GOPATH/bin/hello
Hello, Go examples!
如果工作區中不存在對應的包,go會將對應的包放到GOPATH環境變數指明的工作區下。(如果包已經存在,go跳過代碼拉去而直接執行go install)
建議詳細看一下http://www.linuxprobe.com/set-go-env.html這個,有圖文
『貳』 學習go語言,用什麼IDE比較好
學習的話自己看書吧,遇到問題可以討論下.golang.usr.cc還不錯.
『叄』 golang 如何創建,編譯,打包go語言的源代碼和工程
1.最簡單的方法:
public static String reverse1(String str)
{ return new StringBuffer(str).reverse().toString();
}
2.最常用的方法:
public static String reverse3(String s)
{ char[] array = s.toCharArray();
String reverse = ""; //注意這是空串,不是null
for (int i = array.length - 1; i >= 0; i--)
reverse += array[i];
return reverse;
}
3.常用方法的變形:
public static String reverse2(String s)
{ int length = s.length();
String reverse = ""; //注意這是空串,不是null
for (int i = 0; i < length; i++)
reverse = s.charAt(i) + reverse;//在字元串前面連接, 而非常見的後面
return reverse;
}
『肆』 go語言編譯器有哪些官網
go語言編譯器官網:可以去DELVE官網進行下載。
谷歌資深軟體工程師羅布·派克(Rob Pike)表示,「Go讓我體驗到了從未有過的開發效率。」派克表示,和今天的C++或C一樣,Go是一種系統語言。他解釋道,「使用它可以進行快速開發,同時它還是一個真正的編譯語言,我們之所以現在將其開源,原因是我們認為它已經非常有用和強大。」
撰寫風格:
在Go中有幾項規定,當不匹配以下規定時編譯將會產生錯誤。
每行程序結束後不需要撰寫分號(;)。
大括弧({)不能夠換行放置。
if判斷式和for循環不需要以小括弧包覆起來。Go亦有內置gofmt工具,能夠自動整理代碼多餘的空白、變數名稱對齊、並將對齊空格轉換成Tab。
『伍』 奼備竴浠芥煇璇綠o璇璦寮鍙戝伐紼嬪笀鐨2021鏁欑▼
棣栧厛Go 鏄涓涓寮婧愮殑緙栫▼璇璦錛屽畠鑳借╂瀯閫犵畝鍗曘佸彲闈犱笖楂樻晥鐨勮蔣浠跺彉寰楀規槗銆
Go鏄浠2007騫存湯鐢盧obert Griesemer, Rob Pike, Ken Thompson涓繪寔寮鍙戱紝鍚庢潵榪樺姞鍏ヤ簡Ian Lance Taylor, Russ Cox絳変漢錛屽苟鏈緇堜簬2009騫11鏈堝紑婧愶紝鍦2012騫存棭浜涙椂鍊欏彂甯冧簡Go 1紼沖畾鐗堟湰銆傜幇鍦℅o鐨勫紑鍙戝凡緇忔槸瀹屽叏寮鏀劇殑錛屽苟涓旀嫢鏈変竴涓媧昏穬鐨勭ぞ鍖恆
鐗圭偣鏈
綆媧併佸揩閫熴佸畨鍏
騫惰屻佹湁瓚c佸紑婧
鍐呭瓨綆$悊銆佹暟緇勫畨鍏ㄣ佺紪璇戣繀閫
go璇璦鐨勭敤閫
Go 璇璦琚璁捐℃垚涓闂ㄥ簲鐢ㄤ簬鎼杞 Web 鏈嶅姟鍣錛屽瓨鍌ㄩ泦緹ゆ垨綾諱技鐢ㄩ旂殑宸ㄥ瀷涓澶鏈嶅姟鍣ㄧ殑緋葷粺緙栫▼璇璦銆
瀵逛簬楂樻ц兘鍒嗗竷寮忕郴緇熼嗗煙鑰岃█錛孏o 璇璦鏃犵枒姣斿ぇ澶氭暟鍏跺畠璇璦鏈夌潃鏇撮珮鐨勫紑鍙戞晥鐜囥傚畠鎻愪緵浜嗘搗閲忓苟琛岀殑鏀鎸侊紝榪欏逛簬娓告垙鏈嶅姟絝鐨勫紑鍙戣岃█鏄鍐嶅ソ涓嶈繃浜嗐
瀛︿範緗戠珯鎴戜竴鑸鏄鍦ㄨ彍楦熶笂闈㈠幓瀛︿範銆
『陸』 如何編譯arm linux的go
Golang也就是Go語言,現在已經發行到1.4.1版本了,語言特性優越性和背後Google強大靠山什麼的就不多說了。Golang的官方提供了多個平台上的二進制安裝包,遺憾的是並非沒有發布ARM平台的二進制安裝包。ARM平台沒辦法直接從官網下載二進制安裝包來安裝,好在Golang是支持多平台並且開源的語言,因此可以通過直接在ARM平台上編譯源代碼來安裝。整個過程主要包括編譯工具配置、獲取Golang源代碼、設置Golang編譯環境變數、編譯、配置Golang行環境變數等步驟。
註:本文選用樹莓派做測試,因為樹莓派是基於ARM平台的。
1、編譯工具配置
據說下個版本的golang編譯工具要使用golang自己來寫,但目前還是使用C編譯工具的。因此,首先要配置好C編譯工具:
1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安裝,樹莓派的RaspBian系統是基於Debian修改的,所以可以使用這種方法安裝。
1.2 在RedHat或CentOS 6平台上可以使用sudo yum install gcc libc-devel命令安裝。
安裝完成後可以輸入 gcc --version命令驗證是否成功安裝。
2、獲取golang源代碼
2.1 直接從官網下載源代碼壓縮包。
golang官網提供golang的源代碼壓縮包,可以直接下載,最新的1.4.1版本源代碼鏈接:https://storage.googleapis.com/golang/go1.4.1.src.tar.gz
2.2 使用git工具獲取。
golang使用git版本管理工具,也可以使用git獲取golang源代碼。推薦使用這個方法,因為以後可以隨時獲取最新的golang源代碼。
2.2.1 首先確認ARM平台上已經安裝了git工具,可以使用git --version命令確認。一般linux平台都安裝了git,沒有的話可以自行安裝,不同平台的安裝方法可以參考:http://git-scm.com/download/linux
2.2.2 克隆遠程golang的git倉庫到本地
在終端cd到你想要安裝golang的目錄,確保該目錄下沒有名為go的目錄。然後以下命令獲取代碼倉庫:
git clone https://go.googlesource.com/go
大陸地區可能會獲取失敗,在不翻牆的情況下我試了幾次都沒成功,原因大家都懂的。好在google已經將golang也託管到github上面,所以也可以通過下面命令獲取:
git clone https://github.com/golang/go.git
視網路情況,下載可能需要不少時間。我2M的帶寬花了將近兩個小時才下載完,雖然整個項目不過幾十兆= =
下載完成後,可以看到目錄下多了一個go目錄,裡面即為golang的源代碼,在終端上執行cd go命令進入該目錄。
執行下面命令檢出go1.4.1版本的源代碼,因為現在已經有新的代碼提交上去了,最新的代碼可能不是最穩定的:
git checkout go1.4.1
至此,最新1.4.1發行版的源代碼獲取完畢
3、設置golang的編譯環境變數
主要有GOROOT、GOOS、GOARCH、GOARM四個環境變數需要設置,先解釋四個環境變數的意義。
3.1 GOROOT
主要代表golang樹結構目錄的路徑,也就是上面git檢出的go目錄。一般可以不用設置這個環境變數,因為編譯的時候默認會以go目錄下src子目錄中的all.bash腳本運行時的父目錄作為GOROOT的值。為了保險起見,可以直接設置為go目錄的路徑。
3.2 GOOS和GOARCH
分別代表編譯的目標系統和平台,可選值如下:
GOOS GOARCH
darwin 386
darwin amd64
dragonfly 386
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux amd64
linux arm
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
plan9 386
plan9 amd64
solaris amd64
windows 386
windows amd64
需要注意的是這兩個值代表的是目標系統和平台,而不是編譯源代碼的系統和平台。樹莓派的RaspBian是linux系統,所以這些GOOS設置為linux,GOARCH設置為arm。
3.3 GOARM
表示使用的浮點運算協處理器版本號,只對arm平台有用,可選值有5,6,7。如果是在目標平台上編譯源代碼,這個值可以不設置,它會自動判斷需要使用哪一個版本。
總結下來,在樹莓派上設置golang的編譯環境變數,可編輯$HOME/.bashrc文件,在末尾添加下面內容:
export GOROOT=你的go目錄路徑
export GOOS=linux
export GOARCH=arm
編輯完後保存,執行source ~/.bashrc命令讓修改生效。
4、編譯源代碼
環境變數配置完成自後就可以開始編譯源代碼。在go目錄下的src子目錄中,主要有all.bash和make.bash兩個腳本(另外還有兩個all.bat和make.bat腳本適用於window平台)。編譯實際上就是執行其中一個腳本,兩者的區別在於all.bash在編譯完成後還會執行一些測試套件。如果希望只編譯不測試,可以運行make.bash腳本。使用cd命令進入go下src目錄,執行./all.bash或者./make.bash命令即可開始編譯。由於硬體情況不同,編譯耗費的時間不同。在我的B型樹莓派編譯過程花費了將近半個小時,編譯完成後執行的測試套件又花費了差不多一個小時,總共花費了一個半小時左右。
5、配置golang運行環境變數
編譯完成後,go目錄下會生成bin目錄,裡面就是go的運行腳本。為了以後使用方法,可以將這個bin路徑添加到PATH環境變數中。同樣編輯~/.bashrc文件,因為前面設置過GOROOT環境變數指向go目錄了,所以只需要在末尾加上
export PATH=$PATH:$GOROOT/bin
保存後同樣執行source ~/.bashrc命令讓環境變數生效。
至此,golang源代碼編譯安裝成功。執行go version應該就能看到當前golang的版本信息,表示編譯安裝成功。