前言:即將成爲一名Golang語言的開發人員,把自己學習的過程記錄下來與大家一起分享,希望能給您帶來幫助,如果在編寫的過程中有什麼錯誤或者我說的不對的地方還請大家不吝賜教,給我留言我好及時做修改防止誤導其他閱讀人員,在此就先行感謝了!
聲明:本問中的內容均出自《Go語言編程》、《Go語言學習筆記》、《Go併發編程實戰》、以及視頻“跟着無聞學Go”視頻連接如下:http://edu.51cto.com/course/course_id-1762.html
Go語言基礎之類型
Go語言的關鍵字不多,下面我們就列舉下Go語言的基本數據類型
類型 | 長度 | 默認值 | 說明 |
---|---|---|---|
bool | 1 | false | 布爾類型,真爲true假爲false |
byte | 1 | 0 | 字節類型 |
int,uint | 4,8 | 0 | 默認整數類型,依據目標平臺32或64位 |
int8,uint8 | 1 | 0 | 8位二進制數代表有符號整數類型與無符號 |
int16,uint16 | 2 | 0 | 16位二進制數代表有符號整數類型與無符號 |
int32,uint32 | 4 | 0 | 32位二進制數代表有符號整數類型與無符號 |
int64,uint64 | 8 | 0 | 64位二進制數代表有符號整數類型與無符號 |
float32 | 4 | 0.0 | 浮點類型 |
float64 | 8 | 0.0 | 默認浮點類型 |
complex64 | 8 - | - | |
complex128 | 16 | - | - |
rune | 4 | 0 | Go語言特有類型專用於存儲Unicode編碼 |
uintptr | 4,8 | 0 | 指針 |
string | - | “” | 字符串,默認爲空字符串非NULL |
array | - | - | 數組 |
struct | 結構體 | ||
function | nil | 函數 | |
interface | nil | 接口 | |
map | nil | 字典,引用類型 | |
slice | nil | 切片,引用類型 | |
channel | nil | 通道,引用類型 |
變量的定義
定義
關鍵字var用於變量的定義,於其它語言不同Go語言定義變量將類型放在變量名後面。
var x int //定義一個int類型的變量,自動初始化爲0
var b = false //自動推斷爲bool類型
var i,j,k int //一次定義多個變量
var i,s = 100,"abc" //不同類型的初始化
//也可以以組的方式定義多個變量:
var(
x,y int
a,s = 100,"abc"
)
簡短模式
除了使用關鍵字‘var’,還可以使用更加簡短的方式定義和初始化變量:
x := 10
a,s := 1,”abc”
注:使用簡短模式應注意以下問題:
1 定義變量的同時顯示的初始化
2 不能提供數據類型
3 只能在函數內部使用
多變量賦值
相信很多C++程序員都碰到過交換兩個變量值得問題,在C++中需要引入第三個變量來完成值得交換,在Go語言中提供了多變量賦值的方法從而省略了第三個變量。
x,y := 1,2
x,y = y+3,x+2
//此時x的值爲5,y的值爲3
命名
說了這麼多,我們也應該說下Go語言中的命令了,對變量、常量、函數、自定義類型進行命名,通常優先使用有實際含義,易於閱讀的字母或單子組合。注意在Go語言中沒有類也沒有public關鍵字在Go語言中是方法或者變量在外部可訪問的辦法就是將首字母大寫。
命名建議:
- 以字母或下滑線開始,由多個字母、數字和下劃線組合而成
- 區分大小寫
- 使用駝峯拼寫格式
- 局部變量優先使用短名
- 不用使用保留關鍵字
- 不用使用與預定於常量、類型、內置函數相同的名字
- 專有名字通常爲全部大寫,如escapeHTML
空標識符
Go語言中有個名爲”_”的特殊成員,通常被作爲忽略的佔位符使用,可做表達式的左值。
x,_,z := 1,2,3
上面的示例並不明顯,但是在函數的多返回值時使用時還是很方便的。
常量
相信C++程序員對常量並不陌生,常量表示一個恆定不可改變的值,在Go語言中也使用‘const’修飾。
const x,y int = 1,2
const s = "hello"
const(
i,f = 1,3.14
b = false
)
枚舉
Go語言並沒有明確意義上的enum定義,不過可以藉助‘iota’標識符實現一組自增常量值來實現枚舉類型。
const(
x = iota //x值爲0
y // 1
z // 2
)
以上可以看出iota是自增的如若中斷必須顯示的恢復
const(
a = iota // a爲0
b // 1
c = 100 // c的值爲100
d // d的值爲100
e = iota // e得值爲4此時恢復了自增
f // 5
)
自增的默認類型爲int也可顯示的制定類型
const(
a = iota //int
b float32 = iota //float32
c int = iota //int
)
在實際的使用中,建議使用自定義類型實現用途明確的枚舉類型。
type color byte //自定義類型
cont(
black color = iota //制定常量類型
red
blue
)
引用類型
引用類型特指slice、map、channel這三種預定義類型,相比數字、數組等類型引用類型擁有更復雜的存儲結構。除分配內存外他們還需要初始化一系列屬性,諸如指針、長度、甚至包括哈希分佈、數據隊列等。
引用類型會再之後的章節中進行詳細的介紹。
自定義類型
自定義類型使用關鍵字‘type’,和var與const類似,多個type定義可合併成組,可在函數或代碼塊內定義局部類型。
type data int
var d data = 10