本文系第四篇Golang語言學習教程
在Go語言中,資料類型用於聲明函數和變數。
Go語言按類別有以下幾種資料分類
序號 |
類型 |
描述 |
1 |
bool |
bool類型表示一個布爾值,值為true或false |
2 |
數字類型 |
整型int和浮點型float32、float64.Go支援整型和浮點型數字,並且原生支援複數。 |
3 |
字串類型 |
一串固定長度字元串連起來的序列,Go語言中字串由單個位元組串連起來,使用UTF-8編碼標識Unicode文本。 |
4 |
衍生類別型 |
包括: (a) 指標類型(Pointer) (b) 數群組類型 (c) 結構化類型(struct) (d) Channel 類型 (e) 函數類型 (f) 切片類型 (g) 介面類型(interface) (h) Map 類型 |
bool
bool類型表示一個布爾值,值為true或false
例:
package main import . "fmt"func main(){ a := true //定義 a為true b := false //定義 b為false Println("a is",a, "b is",b) c := a && b //c = a 和 b做與運算 Println("c is",c) d := a || b //d = a 和 b做或運算 Println("d is",d)}
以上程式運行結果如下:
a is true b is false
c is false
d is true
數字類型
序號 |
類型和描述 |
1 |
uint8 無符號8位整型(0 - 255) |
2 |
uint16 無符號16位整型(0 - 65535) |
3 |
uint32 無符號32位整型(0 - 4294967295) |
4 |
uint64 無符號64位整型(0 - 18446744073709551615) |
5 |
int8 有符號8位整型(-128 - 127) |
6 |
int16 有符號16位整型(-32768 - 32767) |
7 |
int32 有符號整型32位(-2147483648 - 2147483647) |
8 |
int64 有符號整型64位(-9223372036854775808 - 9223372036854775807) |
int:根據不同的底層平台(Underlying Platform),表示 32 或 64 位元整型。除非對整型的大小有特定的需求,否則你通常應該使用 int 表示整型。
大小:在 32 位系統下是 32 位,而在 64 位元系統下是 64 位元。
例:
package mainimport ( "fmt" "unsafe")func main(){ a,b := 95,80 //給 a 和 b 賦值 fmt.Println("values of a is",a, "values of b is",b) fmt.Printf("the type of a is %T,the size of a is %d\n",a, unsafe.Sizeof(a)) //輸出 a 的類型和類型大小 fmt.Printf("the type of b is %T,the size of b is %d\n",b, unsafe.Sizeof(b)) //輸出 b 的類型和類型大小,\n換行}
在 Printf 方法中,使用 %T 格式說明符(Format Specifier),可以列印出變數的類型。Go 的 unsafe 包提供了一個 Sizeof 函數,該函數接收變數並返回它的位元組大小。unsafe 包應該小心使用,因為使用 unsafe 包可能會帶來可移植性問題。不過出於本教程的目的,我們是可以使用的。
上面程式會輸出變數 a 和 b 的類型和大小。格式說明符 %T
用於列印類型,而 %d
用於列印位元組大小。
以上程式運行結果如下:
values of a is 95 values of b is 80
the type of a is int,the size of a is 8
the type of b is int,the size of b is 8
從上面的輸出,我們可以推斷出 a 和 b 為 int 類型,且大小都是 64 位元(8 位元組)。
浮點型
package mainimport "fmt"func main(){ a,b := 11.5,55.98 //自動推斷 a, b 的類型 fmt.Printf("Type of is a is %T, type of b is %T\n",a,b) //輸出 a, b 的類型 sum := a+b //將a+b賦值給sum diff := a-b //將a-b賦值給diff fmt.Println("sum",sum, "diff",diff) //輸出sum、diff}
以上程式簡單示範了浮點型的運用。
運行結果如下:
Type of is a is float64, type of b is float64
sum 67.47999999999999 diff -44.48
複數類型
Go語言提供了兩種精度的複數類型:complex64和complex128,分別對應float32和float64兩種浮點數精度。
內建的complex函數用於構建複數,內建的real和imag函數分別返回複數的實數和虛數。
例:
package mainimport ( "fmt" )func get_real_imag() { value4 := 1.2 + 10i var r = real(value4) //返回複數的實部: 1.2 var i = imag(value4) //返回複數的虛部: 10 fmt.Println("the real is",r, "and the imag is",i)}func main() { get_real_imag()}
以上運行結果如下:
the real is 1.2 and the imag is 10
類型轉換
Go 有著非常嚴格的強型別特徵。Go 沒有自動型別提升或類型轉換。
例:
package main import "fmt"func main(){ i := 1 // i 的類型為int j := 5.5 // j 的類型為float64 sum := i + j //賦值sum為 i + j fmt.Println(sum)}
以上程式會報錯:
i + j (mismatched types int and float64)
試圖將兩個不同類型的數相加是不行的,所以需要將 i 轉換成float64類型
例:
package main import "fmt"func main(){ i := 1 // i 的類型為int j := 5.5 // j 的類型為float64 sum := float64(i) + j //賦值sum為 i + j,轉換 i 的類型為float64 fmt.Println(sum)}
以上運行結果如下:
6.5
注意:本例中將 i 轉換為float64,運算正常。若將 j 轉換為int整數類型,則 j 變成整數,輸出結果為 6。
字串類型(string)
在Golang中,字串是位元組的集合。
例:
package main import "fmt"func main(){ first := "Hello,everyone!" //first 賦值 second := "This is ergouzi's Mac " //second 賦值 all := first + " " + second // + 操作符用於拼接字元,將first、空格、second拼接在一起賦值給all fmt.Println(all)}
以上運行結果如下:
Hello,everyone! This is ergouzi's Mac
以上為學習golang資料類型筆記