一起來學GO語言3--GO語言資料型別
阿新 • • 發佈:2018-12-21
GO語言中的資料型別很多,有整型、浮點型、複數型、布林型、字元型、陣列、map等等,這裡說幾種我認為比較有意義的。
1、字串
字串是一個不可變的字元序列。它可以包含任何資料。
內建函式len
s := "abcdef"
fmt.Println(len(s))
得到結果:6
子串生成操作 str := s[i:j],i為起始位置,j為結束為止,結果是一個j-i的字串
s := "abcdef"
fmt.Println(s[:2], s[2:3], s[:]) //ab c abcdef
因為字串不可改變,所以字串內部的資料不允許修改,因此以下操作會報錯
s[1] = "m"
2、常量生成器iota
常量的宣告可以使用常量生成器iota,它建立一系列相關值,iota從0開始取值,逐項加1,用一段程式碼來說明
const (
zero = iota //0
one //1
two //2
three //3
four //4
fiver //5
)
2、陣列
陣列是具有固定瘡毒且擁有0個或多個相同資料型別的元素序列。對陣列的訪問是通過索引來進行訪問的,索引從0開始到資料的長度減一,資料的長度可以使用函式len來進行獲取,下面來看一段程式碼:
arr := [6]int{0, 1, 2, 3, 4, 5} fmt.Println(arr) //遍歷輸出陣列,輸出索引和值 for i, v := range arr { fmt.Printf("index=%d value=%d\n", i, v) } //遍歷陣列,只輸出值 for _, v := range arr { fmt.Printf("value=%d\n", v) }
3、slice(切片)
slice表示一個擁有相同型別元素的可邊長序列(陣列的長度是不可變的), slice通常寫成[]T。
宣告一個數組:
arr := [...]int{0, 1, 2, 3, 4, 5}
建立一個slice:
arr := [...]int{0, 1, 2, 3, 4, 5}
demo := arr[:]
fmt.Printf("slice=%v,len=%d, cap=%d\n", demo, len(demo), cap(demo)) //slice=[0 1 2 3 4 5],len=6, cap=6
slice的引用如果超過的陣列的範圍,會出現異常, 例如:
arr := [...]int{0, 1, 2, 3, 4, 5}
demo := arr[:10]
程式報錯:
slice有三個屬性:指標、長度和容量,slice看起來和陣列很像,slice就像是陣列的一個別名,下面用一段程式碼來感受下兩個之間的區別:
package main
import (
"fmt"
)
//反轉slice
func reverseSlice(s []int) []int {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
return s
}
//反轉陣列
func reverseArray(s [6]int) [6]int {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
return s
}
func main() {
arr1 := [...]int{0, 1, 2, 3, 4, 5}
arr2 := [...]int{0, 1, 2, 3, 4, 5}
fmt.Println(arr1 == arr2) //陣列可以直接進行比較
s := reverseArray(arr1) //反轉陣列,陣列必須是長度一定的[m]T,m為定值
fmt.Println(s)
demo1 := arr1[:]
s1 := reverseSlice(demo1) //反轉切片,切片的定義是[]T,沒有長度
fmt.Println(s1)
//demo2 := arr1[:]
//fmt.Println(demo1 == demo2) //切片不能進行比較
}
程式執行結果為:
上面程式碼中註釋掉的程式碼大家可以放開試試,想想為什麼會報錯,還有上面有兩個反轉的函式,這兩個函式大家也可以互換一下看看結果,想想這樣可以更進一步的理解陣列和slice的區別
這裡在說一點,可以使用內建函式make來建立一個指定長度和容量的slice,其中容量引數可以忽略
arr1 := make([]int, 5, 8) //len=5, cap=8
arr2 := make([]int, 5) //len=5, cap=5 這裡忽略了cap引數,預設cap=len