網站首頁 編程語言 正文
01介紹
在程序設計中,編譯器必須將代表數據的變量名稱替換成該數據所在的內存地址。變量的名稱、類型及內存地址通常會維持固定,但該內存地址所存儲的數據在程序執行期間則可能會改變。
Golang 語言編譯器需要先明確變量的內存邊界,才可以使用變量。通過聲明變量使用的類型,編譯器可以明確變量的內存邊界。
因為 Golang 語言是靜態語言,它不能像動態語言那樣,在運行時可以通過分析變量的值,自動確定變量的內存邊界,所以在 Golang 語言中,使用變量之前,需要先聲明變量。
在 Golang 語言中,在變量顯式賦值的前提下,聲明變量可以省略類型,和使用短變量聲明方法時,也不需要指定變量類型,此時,編譯器會根據變量的值通過類型推斷得出變量類型,從而明確變量的內存邊界。
02變量聲明方式
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" )
03使用場景
我們介紹了多種變量聲明的方式,那么每種 Golang 語言變量聲明方式的使用場景分別是什么,首先,我們需要先了解 Golang 語言中變量的作用域,分別是包級變量,全局變量和局部變量。
包級變量
包級變量的作用域是只能在同一個 package 中使用。
包級變量,只能使用 var 關鍵字的變量聲明方式,如果變量聲明顯式初始化,一般會使用省略類型聲明變量的方式。
全局變量
全局變量的作用域是在項目的任意位置都可以使用。
如果包級變量的變量名首字母大寫,也就是 Golang 語言中的導出變量,那么這個變量就成為全局變量,可以在全局使用。
全局變量,也只能使用 var 關鍵字的變量聲明方式,如果變量聲明顯式初始化,一般會使用省略類型聲明變量的方式。
局部變量
局部變量的作用域是只能在函數體或方法體中使用。
局部變量,一般會優先使用短變量聲明的方式,除非不想給局部變量顯式初始化,我們可以使用省略類型聲明變量的方式。
04注意事項:
函數外的每個語句都必須以關鍵字開始(var、const、func等);
:= 不能使用在函數外;
_ 多用于占位,表示忽略值;
05總結
本文我們介紹 Golang 語言為什么在使用變量之前,需要先聲明變量;Golang 語言有哪些變量聲明的方式和 Golang 語言的每種變量聲明方式適用于什么場景。
原文鏈接:https://developer.51cto.com/article/701282.html
相關推薦
- 2021-12-10 通過docker容器搭建lamp架構的流程_docker
- 2022-12-21 iOS開發學習TableView展現一個list實例_IOS
- 2023-01-14 Python?pandas中to_sql的使用及問題詳解_python
- 2022-09-26 ASP.NET?Core?6最小API中使用日志和DI示例詳解_ASP.NET
- 2022-09-01 jquery實現全選功能_jquery
- 2024-04-02 docker開機自啟設置
- 2022-05-26 Python入門必讀的if語句嵌套方法_python
- 2022-06-24 Python+matplotlib實現簡單曲線的繪制_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支