Golang——變量的聲明與定義


本文始發於個人公眾號:TechFlow,原創不易,求個關注


今天是Golang的第三篇,我們一起來看看Golang當中的變量。

變量聲明

Golang當中的變量類型和C/C++比較接近,一般用的比較多的也就是int,float和字符串。Golang當中不一樣的地方主要有幾點,第一點是嚴格區分了int,int16,int32和int64,同樣區分了float,float32和float64。

前文當中說過,Golang是不支持隱式轉換的,哪怕是int和int32也一樣。

var v1 int
var v2 int32 = 10
v1 = v2

上面的代碼是會報錯的,因為我們用一個int類型的變量去接收了int32類型的。雖然Golang當中int一般也是32位的整數,但是這依然會被認為是兩個不同的類型。

第二點是Golang當中自帶了map類型,像是java以及C++雖然也有map,但是都不是原生支持的,而是必須要通過引入包才可以使用的。所以Golang的設計者就覺得這很二,沒必要啊,既然所有程序員都要用到map,為什么還非要引入包才能使用呢,直接嵌入在默認類型里好了。於是Golang的基本類型當中就有map。

另外一點是Golang當中是有指針的,但是和C語言當中的指針不太一樣,我們先記住這一點,具體的內容我們在后面介紹。

最后一點是Golang當中多了復數類型,也就是complex64和complex128,用來支持復數的運算。一般情況下我們也不太用得到,所以暫時略過。

Golang的聲明方法很簡單,使用var關鍵字進行。和平常的語言不太一樣的是Golang當中的變量類型寫在變量名的后面,而不是前面。

比如:

var v1 int
var v2 float32

剛開始的時候會覺得有些不太適應,但是這樣設計是有它的道理的。尤其在涉及指針的時候,把變量類型寫在后面的方法可以增加可讀性。比如我們來看一個例子,在C語言當中支持指向函數的指針

double (*funcPtr)(double a, double b);

這是一個指向函數的指針,如果我們增加一下難度,比如我們把這個函數指針作為參數傳入其中也變成一個函數指針,整個定義寫出來就會非常復雜:

double (*funcPtr)(double a, void(*funcPtr2)(int b, double c));

這個可讀性非常差,估計要看很久才能看懂,如果是忘了函數指針這茬,估計就徹底看不懂了。

我們再來看Golang的定義:

var v1 func(a float32, funcA func(b int, c double)double

相比之下,golang的定義要比C看起來可讀性強很多。如果你看不太明白上面的例子也沒關系,我們只需要記住這個結論即可。

初始化

Golang當中有三種初始化的方法,我們直接來看代碼:

var v2 int = 10
var v3 = 10
v4 := 10

第一種方式最復雜,我們不但寫出了變量類型還寫出了初始化之后的值。第二種精簡許多,我們只寫了值,編譯器會自動根據我們寫的值去匹配對應的類型。最后一種我們連var和類型都不寫了,但是需要加上冒號,和賦值操作做區分。

剛開始可能會有一些不太適應,尤其是Python選手,一向無所謂類型的。但是寫習慣了之后還可以,並沒有體驗很差,而且寫這種語法很嚴謹的語言有助於提升我們的代碼風格和嚴謹

唯一一點要注意的就是同一個變量不能被連續申明兩次,下面兩種寫法都是錯誤的。

var s string = "hello"
var s string = "hello"

s := "hello"
s := "world"

變量賦值

變量賦值其實沒什么好說的,就是等於號賦值,直接左邊等於右邊即可。

如果只使用賦值的話,所有的變量必須已經經過初始化才可以。畢竟不是動態語言,不像Python不能隨便定義。不過有一點需要注意,Golang當中非常務實地提供了多變量的賦值操作。比如我們要交換兩個變量的值,我們可以用一行語句完成,不再需要引入額外變量了。

a, b = b, a

另外,Golang當中也支持匿名變量,也就是說對於我們不需要的返回值,我們可以不用額外定義一個變量去接收。否則沒有用處,還會報錯。

比如,假設我們一個函數返回兩個變量,但是我們只需要用到其中的一個,我們可以這樣寫:

ret, _ = sample()

如果這里的變量之前沒有定義過,我們還可以這么寫:

ret, _ := sample()

直接用函數返回值來聲明並賦值變量。

關於變量這一塊Golang和C++等語言變化不大,如果有C++基礎的話,學習起來應該非常快速。並且相比於C++繁多的語法和眾多的應用方法,Golang的學習曲線要平緩很多,入門也更簡單。我相信對你們來說一定都不是問題。

勘誤

最后做一個小小的勘誤,由於我學習資料過於陳舊,導致上周關於golang中常量定義的闡述發生了錯誤,在此進行勘誤。在最新的golang版本當中,規定const變量也通過駝峰命名法命名,並且首字母必須大寫。

這里感謝Taosama大神的勘誤。

const HelloWorld = "hello world"

今天的文章就是這些,如果覺得有所收獲,請順手點個在看或者轉發吧,你們的舉手之勞對我來說很重要。


免責聲明!

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



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