一、數值型別
1、整型
go語言的整數型別一共有10個:int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64,可能我們比較常用的就是預設的int和uint,它們隨計算機架構不同所佔空間也會不一樣,而空間的表示法有位元bit或位元組byte(1byte=8bit),具體的差別如下圖所示:
另外整型的表示法還有八進位制、十六進製制,示例如下:
十進位制:var num int = 12
八進位制:var num int = 014 // 用「0」作為字首以表明這是8進製表示法
十六進製制:var num int = 0xc // 用「0x」作為字首以表明這是16進製表示法
2、浮點型
浮點數型別有兩個,即float32和float64,分別佔4位元組和8位元組。
浮點數型別的值一般由整數部分、小數點「.」和小數部分組成,不過表示方式卻多樣化:
正常表示:var num float32 = 0.037
指數表示:var num float32 = 3.7e-2
簡化表示:var num float32 = .037
3、複數型別
複數型別同樣有兩個,即complex64和complex128,分別佔8位元組和16位元組。
複數型別的值一般由浮點數表示的實數部分、加號「+」、浮點數表示的虛數部分,以及小寫字母「i」組成,比如:3.7e+1 + 5.98e-2i 等同於 37.000000 + 0.059800i
4、byte與rune
byte與rune型別有乙個共性,即:它們都屬於別名型別。byte是uint8的別名型別,而rune則是int32的別名型別。(用的比較少,了解一下即可)
二、字串型別
字串型別是用string表示。
宣告:var str string
宣告及賦值:var str string = "hello,world"
簡約賦值:str := "hello,world" // 此種方式是適應任何型別的,因為go語言中會自動識別型別。
與字串相關的包是strings,裡面有很多操作字串的方法,具體使用就不在此贅述。
三、陣列和切片
陣列是固定長度的容器,以對應下標進行賦值和取值,通過len()方法獲取長度,通過cap()方法獲取容量,這兩者值是一致的,預設值為零值(視具體型別而定,比如int就為0,string就為空),它是值型別。
關於這一塊的知識點,說起來其實沒多少,真正用起來的時候各種場景靈活多變,所以不在此過多闡述,還是要多實踐,真金不怕火煉,實踐出真知。
四、字典
字典型別用map表示,通用表示為map[k]t,其中「k」意為鍵的型別,而「t」則代表元素(或稱值)的型別。
宣告:var num map[int]string
簡約賦值:num := map[int]string
取值:v := num[0]
修改值:num[1] = "11"
新增值:num[3] = "3"
刪除值:delete(num, 2)
判斷鍵是否存在:e, ok := num[5] // 不存在ok為false,但是也能取到值,不過是預設空值
五、通道
通道(channel)是go語言中一種非常獨特的資料結構。它可用於在不同goroutine之間傳遞型別化的資料,並且是併發安全的。相比之下,我們之前介紹的那些資料型別都不是併發安全的。這一點需要特別注意。
通道型別的表示方法很簡單,僅由兩部分組成,即:chan t,其中t為型別。
1、緩衝通道
建立並賦值:ch1 := make(chan string, 5) // 建立用make,通道型別為string,後面的5為長度
向通道傳送資料:ch1
從通道接收資料:value :=
判斷通道是否開啟:value, ok :=
關閉通道:close(ch1)
2、非緩衝通道
指傳送方在向通道傳送資料的時候會立即被阻塞,直到有某乙個接收方已從該通道中接收了這條資料。
建立並賦值:ch1 := make(chan string, 0) // 跟緩衝通道差不多,只是最後的長度為0
其它操作跟緩衝通道一致。
3、單向通道
單向通道是指只能進行乙個方向的通道,要麼只接收資料,要麼只傳送資料。
宣告接收通道:type receiver
宣告傳送通道:type sender chan
舉例如下:
Go之零值判斷
python判斷零值很簡單,因為是弱型別,所以會內建自動裝箱判斷處理。只需要 if x 即可。但是go如何判斷?這裡可以借助反射reflect處理。func iszeroofinte ce x inte ce bool value reflect.valueof x switch value.kin...
go語言基礎之結構體比較和賦值
1 結構體比較和賦值 同型別的結構體可以相互賦值 示例 package main 必須有個main包 import fmt 定義乙個結構體型別 type student struct func main s2 student s3 student fmt.println s1 s2 s1 s2 fm...
Go基礎之 介面
在go語言中,乙個類只要實現了介面要求的所有函式,我們就說這個類實現了該介面 inte ce型別可以定義一組方法,用來表示乙個物件的行為特徵,inte ce不能包含任何變數,介面是引用型別。舉個簡單的例子,乙個動物的介面,動物有吃的能力,有叫的能力,等等,這裡省略,假如動物就只有吃和叫的能力。pac...