這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
前言:即將成為一名Golang語言的開發人員,把自己學習的過程記錄下來與大家一起分享,希望能給您帶來協助,如果在編寫的過程中有什麼錯誤或者我說的不對的地方還請大家不吝賜教,給我留言我好及時做修改防止誤導其他閱讀人員,在此就先行感謝了!
聲明:本問中的內容均出自《Go語言編程》、《Go語言學習筆記》、《Go並發編程實戰》、以及視頻“跟著無聞學Go”視頻串連如下:http://edu.51cto.com/course/course_id-1762.html
Go語言基礎之類型
Go語言的關鍵字不多,下面我們就列舉下Go語言的基礎資料型別 (Elementary Data Type)
類型 |
長度 |
預設值 |
說明 |
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類型的變數,自動初始化為0var 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,2const 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 intvar d data = 10