常量
常量聲明
常量是程序在編譯時就確定的值,程序在執行時不能修改常量的值。聲明常量使用關鍵字const。在聲明常量時,需要對常量賦值。
const 名稱 類型 = 值 或
const 名稱 = 值 自動做類型推斷
const aa int = 123 //正確
const aa = 123 //正確
const aa int //錯誤
枚舉
go語言沒有提供枚舉類型,可以藉助常量來定義, iota默認值是0,在一組const定義中每次+1,
const (
E int = iota // 東 0
W // 西 1
S // 南 2
N // 北 3
)
const (
E1 int = iota + 3 // 東 3
W1 // 西 4
S1 // 南 5
N1 // 北 6
)
變量
變量是編程語言的重要組成元素,變量相當於內存空間的一個別名,在程序執行時,根據聲明的變量,會在內存中開闢這樣的一塊存儲單元。
變量聲明
變量聲明定義了內存中存儲的規則和規範,如,var aa int8
的意思是請在內存中給我一塊1byte的長度的存儲單元,我要用來存儲數字的轉化後的補碼,這裏的聲明,相當於定義,相當於蓋房子畫的圖紙,在初始化時,真正的落實和執行。但是在基本類型聲明時,會直接對其做初實化,也就是說,對於基本類型,在使用var聲明時,聲明和初始化是一起做的。
聲明的語法
直接聲明式
var 變量名 類型
類型推斷式
var 變量名 = 值
簡短聲明(該種方式只能用於局部變量)
變量名 := 值
變量初始化
變量初始化是剛在上文說的開闢內存空間,符初值,整型類型默認的初值爲0,也可以在聲明時對其設定
例:
var aa int8 = 8
var bb = 11
cc := 3
在基本類型中,變量的聲明和初始化實際上是一步,這裏之所以分開闡述是爲了說明實際上這是兩步操作
變量賦值
在聲明瞭變量後,就可以修改變量的值
變量的賦值很簡單,使用=
進行賦
注意
已經聲明瞭的變量不能對其再次聲明
如:
var aa int = 8
var aa int8
整型
當我們要把一個值變成計算機可以識別的處理,需要確定兩點
- 存儲的編碼方式
- 存儲的長度
對於整型數據,在計算機內部是以補碼的方式,存儲長度,go語言的提供的多種長度不同的整型數據類型。如下:
類型 | 長度 |
---|---|
int8 | 1byte |
int16 | 2byte |
int32 | 4byte |
int64 | 8byte |
int | 根據系統位數,4byte或8byte |
uint8 | 1byte |
uint16 | 2byte |
uint32 | 4byte |
uint64 | 8byte |
uint | 根據系統位數,4byte或8byte |
byte | 1byte |
rune | 4byte |
根據以上的內存單元的規範和我們已知的補碼知識,可以得到每種類型的存儲範圍
在位計算中再做詳細的展開。
浮點型
go語言支持的浮點型有兩種float32,float64兩種數據類型,它們的算術規範由IEEE754浮點數國際標準定義。
float32在內存分配4byte用於存儲,float64內存中分配8byte用於存儲。那麼怎麼分配這些存儲單元,也就是編碼規範。
看下它的國際標準是怎麼定義的,參考阮一峯博客
存儲的編碼規範又是怎麼定義的呢?
[](https://liushaobo-image-bk.os...
以上對浮點型數據的編碼規範和存儲做了說明。
複數型
go語言提供了複數數據類型complex64和complex128,這個在平時的代碼中很少用的到,在此不做展開
布爾型
在一些編程語言中,沒有bool類型使用0或1來標示go語言中的bool類型佔一個存儲單元
那個在內存中存儲的是什麼樣?
通過gdb調試工具,進入內存中,一探究竟。
計算符
一臺標準的馮諾伊曼模型計算機,有cpu,寄存器, 內存,I/O設備組成,cpu和積存器組成了計算單元,內存是數據的存儲單元,I/O設備是和作爲計算機的入口和出口同外部進行交互。
數值計算的基本運算符有加,減,乘,除,模運算,在go語言中分別對應,+,-,*,/,%
在計算機內部是怎麼完成運算的?該篇幅將單獨作爲一個專題做後文中詳細展開。在此我們只需要知道,通過計算符連接的變量最終都會被轉化爲cpu的邏輯運算。
控制檯輸入輸出
上文分別介紹了內存和計算符,那麼怎麼將計算的結果打印出來,也就是將內存中值,通過I/O設備輸出?
go語言中內置的語言包中提供了這樣的函數,我們只需要調用該函數,即可完成I/O操作。
在fmt包下有Scanln()用於輸入,Println()用於輸出。
總結
以上介紹了go語言的常量及變量的聲明,及基本類型的內存存儲方式做了總結和實驗
喜歡請關注"雲端漫記", 持續爲你更新