資料類型用于聲明函數和變量,資料類型的出現是為了把資料分成所需記憶體大小不同的資料,程式設計的時候需要用大資料的時候才需要申請大記憶體,就可以充分利用記憶體。
Go 語言按類别有以下幾種資料類型:
布爾型 布爾型的值隻可以是常量 true 或者 false。一個簡單的例子:var b bool = true。 |
數字類型 整型 int 和浮點型 float32、float64,Go 語言支援整型和浮點型數字,并且支援複數,其中位的運算采用補碼。 |
字元串類型: 字元串就是一串固定長度的字元連接配接起來的字元序列。Go 的字元串是由單個位元組連接配接起來的。Go 語言的字元串的位元組使用 UTF-8 編碼辨別 Unicode 文本。 |
派生類型: 包括:
|
數字類型:
uint8、uint16、uint32、uint64、int8、int16、int32、int64,同時也支援基于架構的類型,例如:int、uint 和 uintptr
浮點型:
float32、float64、complex64、complex128
其他數字類型:
byte、rune(類似int32)、uint、int、uintptr
指針定義:
var pointer_name *pointer-type
例如:var ip *int
var fp *float32
空指針判斷:
if(ptr != nil)
if(ptr == nil)
數組類型:
Go 語言數組聲明需要指定元素類型及元素個數,如下:
var array_name [SIZE] array_type
舉例:
var balance [10]float32
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0} //編譯器自推導數組個數,“…”不能省略。
切片(slice)類型:
Go 語言切片是對數組的抽象。Go 數組的長度不可改變,在特定場景中這樣的集合就不太适用,Go中提供了一種靈活,功能強悍的内置類型切片("動态數組"),與數組相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。
聲明切片:var slice_name []slice_type
建立初始化切片:slice1 := make([]slice_type,len) //指定類型、長度
也可以指定容量,如:make([]T, length, capacity)
切片初始化舉例:
s :=[] int {1,2,3 }
s := arr[startIndex:endIndex] //初始化切片s為數組arr的部分元素的引用
s := arr[startIndex:] // startIndex開始到最後
s := arr[:endIndex] //從0開始到endIndex
切片是可索引的,并且可以由 len() 方法擷取長度;切片提供了計算容量的方法 cap() 可以測量切片最長可以達到多少。
如果想增加切片的容量,我們必須建立一個新的更大的切片并把原分片的内容都拷貝過來。下面的代碼描述了從拷貝切片的 copy 方法和向切片追加新元素的 append 方法。
package main import "fmt" func main() { var numbers []int printSlice(numbers) numbers = append(numbers, 0) printSlice(numbers) numbers = append(numbers, 1) printSlice(numbers) numbers = append(numbers, 2,3,4) printSlice(numbers) numbers1 := make([]int, len(numbers), (cap(numbers))*2) copy(numbers1,numbers) printSlice(numbers1) } func printSlice(x []int){ fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x) } |
map類型:
Map 是一種無序的鍵值對的集合。Map 是無序的,我們無法決定它的傳回順序,這是因為 Map 是使用 hash 表來實作的。
var map_variable map[key _type]value _type
map_variable := make(map[key _type]value_type)
用一個示例來看用法:
package main import "fmt" func main() { var countryCapitalMap map[string]string countryCapitalMap = make(map[string]string) countryCapitalMap [ "France" ] = "巴黎" countryCapitalMap [ "Italy" ] = "羅馬" countryCapitalMap [ "Japan" ] = "東京" countryCapitalMap [ "India " ] = "新德裡" for country := range countryCapitalMap { fmt.Println(country, "首都是", countryCapitalMap [country]) } capital, ok := countryCapitalMap [ "American" ] if (ok) { fmt.Println("American 的首都是", capital) } else { fmt.Println("American 的首都不存在") } } |
delete() 函數用于删除集合的元素, 參數為 map 和其對應的 key。在看一個示例
package main import "fmt" func main() { countryCapitalMap := map[string]string{"France": "Paris", "Italy": "Rome", "Japan": "Tokyo", "India": "New delhi"} fmt.Println("原始地圖") for country := range countryCapitalMap { fmt.Println(country, "首都是", countryCapitalMap [ country ]) } delete(countryCapitalMap, "France") fmt.Println("法國條目被删除") fmt.Println("删除元素後地圖") for country := range countryCapitalMap { fmt.Println(country, "首都是", countryCapitalMap [ country ]) } } |