這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
GO語言初探
簡介:一直想去研究一下Google牛人們搞出來的GO語言,終於在看了《Go語言之父談Go:大道至簡》這篇文章之後,安耐不住好奇,來體驗一下GO語言是什麼東西!
1.安裝環境ubuntu10.04
2.安裝Go的版本控制工具----這是為了下載Go語言的安裝源碼
~$:sudo apt-get install mercurial
~$ hg
分布式軟體組態管理工具 - 水銀
基本命令:
add add the specified files on the next commit
annotate show changeset information by line for each file
clone make a copy of an existing repository
commit commit the specified files or all outstanding changes
diff diff repository (or selected files)
export dump the header and diffs for one or more changesets
forget forget the specified files on the next commit
init create a new repository in the given directory
log show revision history of entire repository or files
merge merge working directory with another revision
pull pull changes from the specified source
push push changes to the specified destination
remove remove the specified files on the next commit
serve export the repository via HTTP
status show changed files in the working directory
summary summarize working directory state
update update working directory
使用 "hg help" 獲得全部命令的列表,或 "hg -v" 獲得詳細資料
不錯,一個版本管理工具,發現和git差不多
3.設定Go安裝編譯環境
~$:vim .bashrc
在檔案最後添加如下內容:
GOROOT="$HOME/Go"#$HOME=/home/username
export GOROOT
GOOS=linux#系統
export GOOS
GOARCH=386#平台
export GOARCH
GOBIN="$HOME/bin"
export GOBIN
PATH=$PATH:$GOBIN#保證正確編譯安裝
wq儲存推出
4.在配置好環境後利用第2步安裝的版本控制工具下載GO源碼
~$:hg clone -r release https://go.googlecode.com/hg/ $GOROOT
完成後在$HOME目錄下可以看到Go目錄,裡面放置了下載的Go語言的源碼
5.編譯下載的Go源碼
~$cd $GOROOT/src
~$./all.bash
執行完成後到$GOBIN目錄
~$cd $GOBIN
~$ls
go godoc gofmt
發現已經安裝了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.
6.寫一個簡單的例子來驗證一下Go的編譯連結執行過程
在任意目錄下建立hello.go檔案,內容如下:
package main
import "fmt"
func main() {
fmt.Printf("Hello, world;\n");
}
然後使用8g hello.go去編譯,使用8l hello.8去連結,在執行./8.out
發現這裡的8g(386平台)和8l(386平台)都不識別,沒有該命令
到GOROOT目錄下,尋找一下8g、8l
~/Go$ find ./ -name "8g"
./src/cmd/8g
./.hg/store/data/src/cmd/8g
./pkg/tool/linux_386/8g
發現在./pkg/tool/linux_386/下面有相關命令,二話不說把目錄下的所以
可執行命令檔案拷貝到$GOBIN目錄下
~/Go$ cp ./pkg/tool/linux_386/* $GOBIND
這裡不知道為什麼在執行./all.bash的時候為什麼沒有做拷貝,我想要我
去設計時我會這麼做的;
好了這時候再去做:編譯、連結、執行就可以得到結果了
7.最後驗證一下安裝Go語言是否完全正確
到$GOROOT目錄下有個test的目錄下執行run指令碼
~$cd $GOROOT/test
~/Go/test$ ./run
0 known bugs; 0 unexpected bugs
OK!沒有bug,沒有異常;
補充一下:
Go編譯器可以支援三種指令集。不同體繫結構產生的程式碼品質有一些差別:
amd64 (a.k.a. x86-64); 6g,6l,6c,6a
最成熟的實現,編譯器在寄存器層級最佳化,可以產生高品質的目標代碼(有時候gccgo可能更優)。
386 (a.k.a. x86 or x86-32); 8g,8l,8c,8a
amd64平台的的完整移植。
arm (a.k.a. ARM); 5g,5l,5c,5a