Golang——變量的聲明與定義

本文始發於我的公衆號:TechFlow,原創不易,求個關注java


今天是Golang的第三篇,咱們一塊兒來看看Golang當中的變量。程序員

變量聲明

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

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

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,用來支持複數的運算。通常狀況下咱們也不太用獲得,因此暫時略過。spa

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"
複製代碼

今天的文章就是這些,若是以爲有所收穫,請順手點個關注或者轉發吧,大家的舉手之勞對我來講很重要。

相關文章
相關標籤/搜索