3. 型別
go語言內建以下這些基礎型別:
布林型別: bool 。
整型: int8 、 byte 、 int16 、 int 、 uint 、 uintptr 等。
浮點型別: float32 、 float64 。
複數型別: complex64 、 complex128 。
字串: string 。
字元型別: rune 。
錯誤型別: error 。
此外,go語言也支援以下這些復合型別:
指標(pointer)
陣列(array)
切片(slice)
字典(map)
通道(chan)
結構體(struct)
介面(inte***ce)
關於錯誤型別,通道,結構體和介面學習的書上後面有介紹,現在不懂;
在這些基礎型別之上go還封裝了下面這幾種型別: int 、 uint 和 uintptr 等。這些型別的
特點在於使用方便,但使用者不能對這些型別的長度做任何假設。對於常規的開發來說,用 int
和 uint 就可以了,沒必要用 int8 之類明確指定長度的型別,以免導致移植困難。
3.1 布林型別
go語言中的布林型別與其他語言基本一致,關鍵字也為 bool ,可賦值為預定義的 true 和false 示例**如下:
var v1 bool
v1 = true
v2 := (1 == 2) // v2也會被推導為bool型別
布林型別不能接受其他型別的賦值,不支援自動或強制的型別轉換。以下的示例是一些錯誤的用法,
會導致編譯錯誤:
var b bool
b = 1 // 編譯錯誤
b = bool(1) // 編譯錯誤
以下的用法才是正確的:
var b bool
b = (1!=0) // 編譯正確
fmt.println("result:", b) // 列印結果為result: true
3.2 整型
整型是所有程式語言裡最基礎的資料型別。go語言支援表3-1所示的這些整型型別。
3.2.1. 型別表示
需要注意的是, int 和 int32 在go語言裡被認為是兩種不同的型別,編譯器也不會幫你自動
做型別轉換,比如以下的例子會有編譯錯誤:
var value2 int32
value1 := 64 // value1將會被自動推導為int型別
value2 = value1 // 編譯錯誤
編譯錯誤類似於:cannot use value1 (type int) as type int32 in assignment。
使用強制型別轉換可以解決這個編譯錯誤:
value2 = int32(value1) // 編譯通過
當然,在做強制型別轉換時,需要注意資料長度被截短而發生的資料精度損失(比如
將浮點數強制轉為整數)和值溢位(值超過轉換的目標型別的值範圍時)問題。
3.2.2. 數值運算
go語言支援下面的常規整數運算:+、 - 、*、/和%。加減乘除就不詳細解釋了,需要說下的
是,% 和在c語言中一樣是求餘運算,例如:
5 % 3 // 結果為:2
3.2.3. 比較運算
go語言支援以下的幾種比較運算子: > 、 < 、 == 、 >= 、 <= 和 != 。這一點與大多數其他語言相
同,與c語言完全一致。下面為條件判斷語句的例子:
i, j := 1, 2
if i == j
兩個不同型別的整型數不能直接比較,比如 int8 型別的數和 int 型別的數不能直接比較,但
各種型別的整型變數都可以直接與字面常量(literal)進行比較,比如:
var i int32
var j int64
i, j = 1, 2
if i == j
if i == 1 || j == 2
3.2.4. 位運算
go語言支援表3-2所示的位運算子。
go語言的大多數字運算子與c語言都比較類似,除了取反在c語言寫法中是 ~x ,而在go語言中是 ^x 。
好了,今天就抽空學習了型別,型別中的布林型別和整型。go中的型別還是跟c中有些不一樣,但總體的思想差不多,有的寫法不一樣而已。嗯接下來有時間繼續學習。go,go,go!
繼續來學習socket
經過這段時間的閱讀公司 獲得了一定的知識,也發現了一些公司 裡面的錯誤和奇葩的事情。首先是我最不理解的,中變數的命名奇葩,巨集定義奇葩,函式名奇葩。其實這三個東西,歸根結底就是乙個東西,就是起名字的問題。我們知道,在 裡面,要想是 能夠簡單易讀,而且條理清晰。我們可以使用英語來給變數給函式命名,這是...
GO語言 順序程式設計1
記錄筆記 go語言的順序程式設計 1.變數 變數是幾乎所有程式語言中最基本的組成元素。從根本上說,變數相當於是對一塊資料儲存 空間的命名,程式可以通過定義乙個變數來申請一塊資料儲存空間,之後可以通過引用變數名來 使用這塊儲存空間。go語言中的變數使用方式與c語言接近,但具備更大的靈活性。1.1 變數...
01 Go 順序程式設計
go 的 bool 型別不支援 其他型別的強制轉換 int型別和int32被認為是兩種不同的型別。編譯器不會做自動轉換 複數的表示 var value1 complex64 value1 3.2 12i real 實部 imag 虛部 字元型別 rune 代表單個unicode字元 byte 代表u...