准備沖鋒 golang入坑系列


史前摘要: 本來想寫讀前必讀,但連續幾篇博文都寫讀前必讀,感覺就沒有了新意。 所以換成史前摘要,反正是一個意思。 此摘要的目的仍然是提醒點擊而來的同學,本系列最新文章在這里。放到博客園的目的是為了方便不能翻牆的同學查看。 有人說寫的太膚淺沒意思,我的回答是,飯有粗茶咸淡,味有酸甜苦辣,蘿卜青菜各有所愛。沒轍,本人也就這點能耐了,耐看您就多看點,不耐看,呵呵,那我也改不了啦。

好,史前的話說完了,下面開始史后的話。

樹活一張皮,人活一張臉。文章好不好,標題最重要。光起名就想了10幾分鍾,中國漢語博大精深,但適合做技術類標題的真心太難想了。標題不夠,寫詩來湊,所以來段繞口小段子算是開場:

守法朝朝憂悶,強盜夜夜歡歌。 損人利己騎馬騾,正直公平卻挨餓。 修橋補路瞎眼人,殺人放火事兒真多。我到西天問我佛,佛說:我TM也沒轍。

看完,樂完。收拾心情,開始繼續學Golang。

在上一節,你學會了寫第一個Golang程序,也知道了Golang的程序結構。我不知道你是什么技術背景,也不知道有多少編碼功底。所以有的地方寫的比較啰嗦,懂了,就一笑而過。不懂,就好好看一下。知識多了,不丟人。不懂裝懂,最可怕。

這一節,你將接觸到Golang的基本數據類型。

自打有編程語言開始,基本類型就三類:布爾,字符/字符串,數值(和其它)。不同的語言,對類型有不同的分類標准,就會衍生出更為細致的分類,但本質就這么三類。其它語言,咱先不管。先來看看Golang的類型划分:

  • 布爾類型

只有兩個值,true或者false。記住只有這兩個值。別的語言可以通過0或者1來充當布爾判斷,但在golang里面不行(筆桿子出真理,不行就自己寫個代碼來驗證一下)。golang只認true or false。

  • 字符/字符串

字符多了就是字符串。 從內存上來說,字符串就是內存中連續排列的字符的集合。在內存當中保存的都是01這樣的二進制,不會保留一個漢字或者字母。所以每個字符都對應着一個數字,這個數字就是ASCII碼里面的值。比如十進制的33就是'!'。雖然字符對應的是數字,但Golang仍然賦予字符一個特定的類型叫做byte。你可以這么定義一個字符:

var c byte
c = 33

字符多了就是串,所以字符串類型string也可以理解成是[]byte(byte數組)。提醒一點,Golang的字符串是不可更改的。 記住即可,日常中不會體會到,除非裝X較真的時候(比如面試)會提到。這里的不可更改指的是下面的場景:

str := "Who said string cannot change?"
str = "I don't konw"

str仍然是哪個str,但str指向的內存地址已經變了。str只是一個名字,一個代號而已,拿掉這個代號,str又是什么東西(寫這段的時候,剛好旁邊在放武林外傳呂秀才口擒姬無命那段,所以直接用了,應該沒有版權問題)? 上面說到字符串是內存中連續的字符集合,所以當你對字符串修改時,其實是將一段新的內存給了str。因此才會說字符串是不可更改的。因為從來都是給它賦新值,舊值直接被垃圾回收了。 這段記住即可,除了面試,其它沒有會被提到的場合。

  • 數值類型

這個類型需要好好說一下了,因為衍生的類型太多了。但多歸多,真正使用的就那么幾個(誰用誰知道)。

整型值
序號 類型和取值范圍
1 uint8 無符號8位整型 (0 to 255)
2 uint16 無符號16位整型 (0 to 65535)
3 uint32 無符號32位整型 (0 to 4294967295)
4 uint64 無符號64位整型 (0 to 18446744073709551615)
5 int8 有符號8位整型 (-128 to 127)
6 int16 有符號16位整型 (-32768 to 32767)
7 int32 有符號32位整型 (-2147483648 to 2147483647)
8 int64 有符號64位整型 (-9223372036854775808 to 9223372036854775807)

一句話點明:無符號整型只能表示正數,有符號的可以表示負數。但數的個數是相同的(自己找個筆頭,算算二進制就知道了)

浮點數
符號 類型和取值范圍
1 **float32 **32位浮點數
2 **float64 **64位浮點數
3 **complex64 **實部虛部都是一個float32的復數
4 **complex128 **實部虛部都是一個float64的復數

Golang里面沒有float類型,所以需要浮點數的時候需要指明長度。 除了計算和錢有關的程序(計算利息,收益等等),基本上很少會用到浮點數。

其它數值類型
序號 類型
1 byte等同於uint8
2 rune等同於 int32
3 **uint **等同於 32 or 64 bits
4 **int **等同於 uint
5 uintpt 指針類型 CGO里面經常用到

上面列出了Golang當中所有的數值類型,大部分而且是絕大部分是不常用到的。經常用的就是int, byte再加上float32/64,沒有其它。

甚至有的時候,你都不知道用的是什么類型,例如:

i := 0

很可能你就直接聲明了一個變量。這個變量什么類型, who care? 不能說你錯,因為我也經常這么干。但我知道i 是int型🙄。 剛開始寫golang,別被老司機帶壞了。老老實實的聲明變量類型,等你變老了,再去調戲小姑娘

var i int
i = 0

沒有人會問到常量么? 在有的文章或者教程中,常量也被歸納到類型中.Golang官方里面沒有這么提,所以尊重原創,我也不認為常量算是一種類型。

變量

類型是為變量服務的,類型是衣,變量是皮。前面你所寫的golang代碼中已經有變量了,但卻只其有而不知它為啥有,看下面就讓你知道變量是怎么回事。

說的官方點,變量只不過是給程序可以操作的存儲區域的名稱而已。Go中的每個變量都有一個特定類型,該類型決定變量內存的大小和布局,可以存儲在該內存中的值的范圍,以及可以應用於該變量的操作集。

這種話,說出來都繞口。 通俗大白話,變量就是一種保存在內存里的數據結構。

變量名只能有字母,數字或者下划線來組成。但必須以字母或者下划線開頭,別找事,用數字開頭。那就是自己挖坑自己遭殃。自己作孽自己die。因為Golang對大小寫敏感,所以首字母是否要大寫,根據是否可見來判斷。 如果不保准,就小寫。等着后悔了,改成大寫也來得及。

Golang也允許定義各種其他類型的變量,例如枚舉、指針、數組、結構和Union,為了體現本書內容的厚度,我們放在以后的章節中討論這些變量。在本章中,將只關注基本的變量類型。

聲明變量的基本格式是:

var 變量名稱 變量類型

也可以采用:

變量名稱 := 初始值

但還是那句話,沒練成老司機,就別調戲小姑娘。老老實實的用第一種吧。如果某天看到下面的聲明方式也別奇怪:

var  i, j, k int

golang支持同時聲明多個變量。 上面就聲明了三個i、j和k三個int類型的變量。一般來說,聲明完之后,就擇機進行初始化。

i = 4
j,k = 5,6

可以單獨給某個變量賦值,也可以同時給多個變量賦值。 喜歡哪個就用哪個,高興就好。

像這種通過var來聲明的變量,稱之為靜態變量。 也就是編譯器在編譯階段就可以知道數據類型的變量。 反之就是動態變量,也就是通過 i := 0這種,運行時才能推導出變量類型。 不用擔心,兩者在效率上是否有區別。 現在的CPU老牛X了,不在乎這點差距。

介紹完常規命名方式,下面來介紹個"孔乙己"式的方式:

var a, b, c = 3, 4, "foo"

花哨不實用,知道即可。非要練,請自便~ 小心被團隊里的其它人打折腿。

Golang的變量還是很簡單的,實用的就那么幾招,學會了就真的學會了,沒有花架子。

本節起名是准備沖鋒。沖鋒之前,送你一把稱心稱手的兵器。介紹一個IDE

Goland

IDE大廠JetBrains推出的專業Golang IDE。 現在還是預覽版,所以不要錢。 趁着免費趕緊用吧。當哪天收費了,擼起袖子去找破解Key吧。

安裝好Goland之后,基本上什么都不需要配置,開箱既用。唯獨需要你自己維護一下GOPATH。 不知道何為GOPATH? 老鐵,上點心,別吃完飯就忘... 翻到前面幾節復習一下。

Goland的GOPATH設置在Preferences --> Go --> GOPATH. 里面有全局GOPATH也有項目GOPATH,根據自己的需要,自己維護一下。如果心情好,可以順手去維護了GOROOT。反正是no zuo no die。 工程跑不起來,還是自己受傷💔。

所以只維護GOPATH就好。

第一式,亢龍有悔就結束了。 入門沒入門? 沒入門... 再從第一節讀一遍,保證入門。 入了門? 看看有沒有點star,沒點趕緊點一個。每節最后我都提示一下,反正是為了湊字數..


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM