Go學習之懶人速成 – 基礎篇(二)
- 2019 年 10 月 8 日
- 筆記
在上一篇《入門篇》,已經提高了Go的安裝和使用,接下來我們一起學習一下Golang的基礎語法
為響應一起交流的朋友們的吐槽,後續文章將陸續加上目錄結構,方便大家閱讀(主要還是懶,O(∩_∩)O) orz……
– api文檔
– 包 – package
– main方法
– 變數
– 常量
– iota關鍵字
– 數組
– fmt是什麼鬼
首先,先提供給大家一個api官網,開發者必備手冊,地址:https://golang.org/cmd/api/
當然,可能有的朋友沒有VPN,連接不上官網,有一個本地查看文檔的方式,如下:

或者使用http,瀏覽器方式查看

1、什麼是包(package)?
我們在使用其它語言的情況,比如Java(本主是Java開發出身,0rz,以此為例),是有「包」這個概念的,其實,就可以簡單的理解為是便於管理和組織所有的文件所使用的,比如java中常用的類String,它就隸屬於「java.lang」包下的類。(當然,新手不理解也沒有關係)。在Go當中,也是類似的概念,它將我們的go文件(文件的後綴名為「.go」)組織起來,可以方便進行歸類、復用等。

你會看到這樣的一些文件結構,比如encoding包,下面就有base32、base64、hex、json等等,當需要使用時,則

在開篇《入門篇》中,所講到的編寫「hello world」使用了「fmt」,就使用這樣的導入方式,當需要導入多個包時,可以使用

包的命名
go語言的包的命名,遵循簡潔、小寫、和go文件所在目錄同名的原則,這樣就便於我們引用,書寫以及快速定位查找。對於在企業當中開發的程式而言,我們一般採用域名作為頂級包名的方式,這樣就不用擔心和其他開發者包名重複的問題了,比如公司的域名是`www.bboyHan.com`,那麼開發的go程式都以`bboyHan.com`作為全路徑中的最頂層部分,導入開發的工具包則可以寫為:

2、Main
我們知道,在java當中,有一個主程式的入口main()方法,而Go語言程式,也是類似。當把一個go文件的包名聲明為main時,就等於告訴go編譯程式,這是一個可執行程式,那麼go編譯程式就會嘗試把它編譯為一個二進位的可執行文件。如果沒有這個函數,程式就無法執行。

那麼,思考一個問題:Go編譯器又是如何去尋找各個文件、包之間的依賴關係而構建程式的呢?
在上一文當中,我們提到了環境變數GOROOT和GOPATH兩個概念,這是兩個定義路徑的環境變數,GOROOT是安裝Go的路徑,比如 C:go ;GOPATH是我們自己定義的開發者個人的工作空間,比如C:workspacesrcbbboyHan。
編譯器會使用我們設置的這兩個路徑,再加上import導入的相對全路徑來查找磁碟上的包,比如我們導入的fmt包,編譯器最終找到的是 C:gofmt 這個位置。對於包的查找,是有優先順序的,編譯器會優先在GOROOT里搜索,其次是GOPATH,一旦找到,就會馬上停止搜索。如果最終都沒找到,就會報編譯異常了。
3、變數
Go中使用全新的關鍵字var來聲明變數。var我們並不陌生,在Javascript 和C#中均有出現。不同的是Go和C#中變數屬於強類型,在聲明變數後就不允許改變其數據類型。記住,Go屬於強數據類型
聲明及初始化

值得注意的一點,賦值時如果要確定你想要的類型,在Go中是不支援隱式轉換的。如果是定義個float64類型的變數,請寫為

4、常量
使用constant關鍵字進行定義,官方文檔內容

有趣的一點,就是Go在一些情況下,會做一些調整,比如:

也就是說,Go在不損失精度的情況下會把3.0這類浮點數視作整數3,如果類型顯式指定了,在表達式當中就不會產生變化。在使用的時候會根據上下文需要的類型轉化為實際類型,比如uint8(0) + 1.0就是uint8(1),但是uint8(0)+2.2就會由於2.2無法轉化為uint8而報錯。
當多個常量需要定義時,也可以使用簡易寫法:

5、iota
iota,特殊常量,可以認為是一個可以被編譯器修改的常量。在每一個const關鍵字出現時,被重置為0,然後再下一個const出現之前,每出現一次iota,其所代表的數字會自動增加1。

6、數組

因為數組的創建在記憶體當中是一段連續的空間,所以通過索引進行直接訪問,訪問的效率非常高

看了上面的程式碼,想必會有朋友會問「fmt」還沒有講呢,下面講解一下fmt包的相關知識
7、「fmt」
fmt包實現了格式化的I/O函數,這點類似C語言中的printf和scanf,但是更加簡單,其中的格式「佔位符」衍生自 C

佔位符
一般佔位符
符號 |
說明 |
---|---|
%v |
相應值的默認格式 |
%+v |
在列印結構體時,默認格式,會添加欄位名 |
%#v |
相應值的 Go 語法表示 |
%T |
相應值的類型的 Go 語法表示 |
%% |
字面上的百分號,並非值的佔位符 |
布爾佔位符
符號 |
說明 |
---|---|
%t |
單詞 true 或 false |
整數佔位符
符號 |
說明 |
---|---|
%b |
二進位表示 |
%c |
相應 Unicode 碼點所表示的字元 |
%d |
十進位表示 |
---|---|
%o |
八進位表示 |
%q |
單引號圍繞的字元字面值,由 Go 語法安全地轉義 |
%x |
十六進位表示,字母形式為小寫 a-f |
%X |
十六進位表示,字母形式為大寫 A-F |
%U |
Unicode 格式:U+1234,等同於 "U+%04X" |
浮點數及其複合構成佔位符
符號 |
說明 |
---|---|
%b |
無小數部分的,指數為二的冪的科學計數法,與 strconv.FormatFloat 的 'b' 轉換格式一致。例如 -123456p-78 |
%e |
科學計數法,例如 -1234.456e+78 |
%E |
科學計數法,例如 -1234.456E+78 |
---|---|
%f |
有小數點而無指數,例如 123.456 |
%g |
根據情況選擇 %e 或 %f 以產生更緊湊的(無末尾的 0)輸出 |
%G |
根據情況選擇 %E 或 %f 以產生更緊湊的(無末尾的 0)輸出 |
字元串與位元組切片佔位符
符號 |
說明 |
---|---|
%s |
字元串或切片的無解譯位元組 |
%q |
雙引號圍繞的字元串,由 Go 語法安全地轉義 |
%x |
十六進位,小寫字母,每位元組兩個字元 |
%X |
十六進位,大寫字母,每位元組兩個字元 |
指針
符號 |
說明 |
---|---|
%p |
十六進位表示,前綴 0x |
fmt中的方法:

其它關於fmt的內容未進行詳細解釋的,可以參考官方文檔進行進一步研究學習

本公眾號致力於做一個
非營利性質
的技術資源共享交流平台
有任何建議或問題,歡迎點擊上方藍色字體關注小編公眾號或直接加小編微信交流,期待喜歡IT,從事IT的行業大牛一起學習交流。