Go語言入門——從一個簡單例子入門
檢視文件
首先先分享一個可以在本地就能檢視文件的騷操作(linux系統)
1.開啟命令列終端,輸入godoc -http=:8000,如果想後臺執行在後面加個&
2.然後開啟瀏覽器,輸入網址:localhost:8000 就可以愉快地看文件了
go語言是個什麼東西我想不用我介紹了~~~大家百度吧
接下來我會一步一步地敲一個hello who?程式碼
下載
如果你使用的是linux系統:
sudo apt-get install golang
如果沒成功:
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang
如果你使用的是windows,mac系統:
查百度~~~
在終端執行go version
如果失敗,看下面配置環境變數
為GOPATH做準備
GOPATH對Go來說是一個很重要的環境變數,在設定環境變數前,先要做一些準備工作
在你喜歡的地方建立一個資料夾,你可以隨便起名,我呢是建在/home/username目錄中的,資料夾的名字就叫go。在該資料夾下再建3個資料夾,名字分別為/bin,/pkg,/src。/src放原始碼,使用go get命令時,原始碼就下載在這個資料夾。/bin存放使用go install命令編譯的可執行檔案。/pkg存放編譯後生成檔案(這個目錄的作用是我百度的……我也不知道該咋用,畢竟初學者0.0)至此,準備工作完成。
設定環境變數
在/etc/profile或者~/.profile中加入這幾行命令
export GOROOT=/usr/lib/go
export GOPATH=/home/username/go(這裡視情況而定,看自己的資料夾建在哪裡啦)
export PATH=$PATH:$GOPATH/bin(添加了這個環境變數後,go install生成的可執行檔案在任何位置都能執行了0.0)
然後,在終端中敲入這樣的程式碼,讓配置生效
source .profile(看你改了哪個檔案,這個檔案只是為特定單個使用者服務的,也就是說只對一個使用者起作用)
然後,在終端輸入 go env
可以看到所有go相關的環境變數
敲程式碼!
在$GOPATH/src目錄下,新建名為hello的資料夾,在該資料夾下新建hello.go的原始碼檔案
開始敲程式碼辣!!!
package main
func main() {
who := "world!"
if len(os.Args[1:]) > 0 {
who = ""
for _, arg := range os.Args[1:] {
who += " " + arg
}
}
fmt.Println("hello", who)
}
看了程式碼是不是覺得很難受?是不是覺得博主程式碼格式有毒?彆著急,接著往下看。go語言的工具鏈可以說是十分厲害了,其中就有一個叫goimports的工具(科普一個工具:gorun,可以把go語言當作指令碼語言執行)
如果你沒有安裝下面貼出安裝命令:
sudo apt-get install golang-golang-x-tools
然後執行以下命令:
goimports -w hello.go
-w引數作用為將結果寫入檔案,而不是輸出在終端,來看看現在的程式碼
package main
import (
"fmt"
"os"
)
func main() {
who := "world!"
if len(os.Args[1:]) > 0 {
who = ""
for _, arg := range os.Args[1:] {
who += " " + arg
}
}
fmt.Println("hello", who)
}
hohoho,我發誓我沒動過原始檔~~~
gofmt也有將程式碼規範化的功能,只是goimports工具更加強大,可以自動匯入需要的包(Go語言很嬌氣,如果包匯入了沒有使用或者使用到的包沒匯入都會導致編譯失敗)
執行
進入hello目錄,在終端中輸入go install(或者go install hello在任何目錄下都生效)
進入/bin目錄,你會發現多了一個名為hello的檔案,在終端中輸入hello
~$ hello
hello world!
輸入hello Go language
~$ hello Go language
hello Go language
解析
接下來我們來解析這個程式。
首先看package main
在Go語言中,所有的程式碼必須從屬於包,每一個Go語言程式都必須包含一個main包以及一個main()函式,main()函式是整個程式的入口,最先被執行。其實,Go語言還可能包含init()函式,先於main()執行,用於初始化包。需要注意的是,包名和函式名不會發生命名衝突。
Go語言針對的處理單元是包而非檔案,在Go語言編譯器看來,只要開頭的包宣告一樣,那麼它就屬於同一個包,就相當於都放在一個檔案裡,很難理解對吧~~~就好像糖葫蘆,雖然插著好多個山楂,但是每個山楂都屬於這個糖葫蘆中的一部分。由於有這樣的特性,我們可以將包拆成任意數量的原始碼檔案。
import語句就不用我介紹了
Go語言不需要;(除非在同一行中輸入多個語句),if和for語句也不需要(),分號由編譯器自動新增。
Go語言的函式和方法由func關鍵字定義。
大家可能會看到:=這樣怪異的表達,這個表示式完成了兩個操作,宣告和賦值,不需要宣告變數型別不代表Go語言是弱型別語言,Go語言是強型別語言,不需要宣告型別是因為Go會從初始化值中推匯出型別。:=只能用在函式中,如果宣告包一級變數,可以使用var關鍵字,var name = ???或者 var name type。而後面的who變數為什麼不用:=,因為一旦使用了who:=""這樣的表達,就相當於在if語句作用域內部重新聲明瞭一個名為who的變數,生命週期為if語句內部,就是區域性變數。
在for迴圈中,使用了range關鍵字,每次迴圈會返回鍵和值,值儲存在arg中,_則是鍵。_,arg 這樣的表達看起很奇怪,這是因為Go語言不允許宣告變數後不使用,而我們確實用不到range返回的鍵,所以使用 _ 這個東西,相當於垃圾堆。
os.Args是一個string型別的切片(slice)和python差不多
好啦,就講到這裡了,累了-_-