常量
常量聲明
常量是程式在編譯時就确定的值,程式在執行時不能修改常量的值。聲明常量使用關鍵字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用于存儲。那麼怎麼配置設定這些存儲單元,也就是編碼規範。
看下它的國際标準是怎麼定義的,參考阮一峰部落格
存儲的編碼規範又是怎麼定義的呢?
以上對浮點型資料的編碼規範和存儲做了說明。
複數型
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語言的常量及變量的聲明,及基本類型的記憶體存儲方式做了總結和實驗
喜歡請關注微信公衆号"雲端漫記", 持續為你更新