<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在程式設計中,編譯器必須將代表資料的變數名稱替換成該資料所在的記憶體地址。變數的名稱、型別及記憶體地址通常會維持固定,但該記憶體地址所儲存的資料在程式執行期間則可能會改變。
Golang 語言編譯器需要先明確變數的記憶體邊界,才可以使用變數。通過宣告變數使用的型別,編譯器可以明確變數的記憶體邊界。
因為 Golang 語言是靜態語言,它不能像動態語言那樣,在執行時可以通過分析變數的值,自動確定變數的記憶體邊界,所以在 Golang 語言中,使用變數之前,需要先宣告變數。
在 Golang 語言中,在變數顯式賦值的前提下,宣告變數可以省略型別,和使用短變數宣告方法時,也不需要指定變數型別,此時,編譯器會根據變數的值通過型別推斷得出變數型別,從而明確變數的記憶體邊界。
Golang 語言的變數宣告比較靈活,它支援多種變數宣告的方式,包括標準宣告變數,不顯式賦初始值宣告變數,省略型別宣告變數和短變數宣告。
var a int = 100
閱讀上面這段程式碼,我們可以發現 Golang 語言的標準宣告變數方式包含 4 部分,分別是 var 關鍵字,變數名 a,變數型別 int 和變數的值 100。
如果我們不想給宣告的變數賦初始值,也可以不顯式給變數賦值,省略等號和值,如下所示:
var a int
如果不顯式給變數賦值,變數的值是型別的零值,即型別的預設值。
標準宣告變數方式的 4 部分,除了可以不顯式給變數賦值,還可以省略型別,如下所示:
var a = 100
我們在文章開頭介紹編譯器需要根據變數的型別確定變數的記憶體邊界,如果在宣告變數時,未指定變數的型別,編譯器還可以確定變數的記憶體邊界嗎?
答案是可以。原因是 Golang 編譯器可以根據變數的賦值通過型別推斷得到變數的型別。
細心的讀者可能會問,Golang 語言可以將標準變數宣告方式的 4 部分中型別和顯式賦初始值同時省略嗎?
答案是不可以。Golang 編譯器必須至少明確變數的型別或初始值,二者如果都省略,編譯器將無法得到變數的型別,從而也就不能根據型別明確變數的記憶體邊界。
以上兩種在標準宣告變數方式的基礎上簡化的變數宣告方式,都需要使用關鍵字 var,可能會有讀者問可以省略關鍵字 var 嗎?
答案是可以。Golang 語言還有一種最簡化的宣告變數的方式,短變數宣告,使用短變數宣告的方式,可以同時省略關鍵字 var 和變數的型別。
a := 100
閱讀上面這段程式碼,它就是短變數宣告,與標準變數宣告的方式相比,該方式省略了關鍵字 var 和變數的型別。但是,細心的讀者可能已經發現,= 改為 :=。Golang 編譯器可以根據變數的賦值做型別推斷,得到變數的型別,從而明確變數的記憶體邊界。
短變數宣告的方式雖然是 Golang 語言中最簡化的變數宣告的方式,但是它也有侷限性,它只能用於區域性變數宣告。
無論是省略型別顯式賦初始值宣告變數,還是短變數宣告,它們都是 Golang 編譯器根據變數的賦值,通過型別推斷得出變數的預設型別。
如果我們也不想使用變數的預設型別,那麼我們可以通過顯式型別轉換得到我們想要的變數型別,如下所示:
var a = int8(100) b := int8(60)
所有宣告變數的方式,都支援變數列表宣告。所謂變數列表宣告,就是使用 var 關鍵字,通過一行程式碼宣告多個變數。
var a, b, c int = 100, 200, 300 var d, e, f int var g, h, i = 400, "你好", true j, k, l := 500, "世界", 3.14
Golang 語言還支援變數宣告塊,使用關鍵字 var 將多個單個變數宣告或變數列表宣告放在一起,如下所示:
var ( a int = 100 b int = 200 ) var ( c = 300 d = 3.14 f = true ) var ( e, f, g int = 10, 20, 30 h, i, j string = "a", "b", "c" )
我們介紹了多種變數宣告的方式,那麼每種 Golang 語言變數宣告方式的使用場景分別是什麼,首先,我們需要先了解 Golang 語言中變數的作用域,分別是包級變數,全域性變數和區域性變數。
包級變數的作用域是隻能在同一個 package 中使用。
包級變數,只能使用 var 關鍵字的變數宣告方式,如果變數宣告顯式初始化,一般會使用省略型別宣告變數的方式。
全域性變數的作用域是在專案的任意位置都可以使用。
如果包級變數的變數名首字母大寫,也就是 Golang 語言中的匯出變數,那麼這個變數就成為全域性變數,可以在全域性使用。
全域性變數,也只能使用 var 關鍵字的變數宣告方式,如果變數宣告顯式初始化,一般會使用省略型別宣告變數的方式。
區域性變數的作用域是隻能在函數體或方法體中使用。
區域性變數,一般會優先使用短變數宣告的方式,除非不想給區域性變數顯式初始化,我們可以使用省略型別宣告變數的方式。
函數外的每個語句都必須以關鍵字開始(var、const、func等);
:= 不能使用在函數外;
_ 多用於佔位,表示忽略值;
本文我們介紹 Golang 語言為什麼在使用變數之前,需要先宣告變數;Golang 語言有哪些變數宣告的方式和 Golang 語言的每種變數宣告方式適用於什麼場景。
到此這篇關於Golang語言的多種變數宣告方式與使用場景的文章就介紹到這了,更多相關Golang多種變數宣告與使用場景內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45