go的基礎數據類型

基礎的數據類型:golang

布爾類型:bool
整型:int八、uint8(byte)、int1六、int(平臺相關)、uint(平臺相關)、uintptr(同指針,32位平臺爲4字節,64位平臺爲8字節)
浮點類型:float3二、float64
複數類型:complex6四、complex128
字符串:string
字符類型:rune
錯誤類型:error

複合類型:數組

指針(pointer)
數組(array)
切片(slice)
字典(map)
通道(chan)
結構體(struct)
接口(interface)

 

Go 語言在聲明變量時,自動對變量對應的內存區域進行初始化操做。每一個變量會初始化其類型的默認值,例如:
整型和浮點型變量的默認值爲 0。
字符串變量的默認值爲空字符串。
布爾型變量默認爲 bool。
切片、函數、指針變量的默認爲 nil。

 

1、布爾類型app

var v1 bool
v1 = true

布爾類型不能接受其餘類型的賦值,不支持自動或強制的類型轉換。函數

2、字符類型ui

var str string
str = "Hello world"

3、數組類型spa

聲明變量及初始化第一種:.net

var team [3]string
team[0] = "hammer"
team[1] = "soldier"
team[2] = "mum"

聲明變量及初始化第二種:指針

var a [5] int = [5]int{1,2,3,4,5}
var a = [5]int{1,2,3,4,5}
var a = [5]int{1,2,3}
var a = [...]int{1,2,3,4,5}
var a = [5]string{1:'abc',4:'efg'}

4、切片code

切片藉助數組的建立:blog

var a [5]int
var b []int = a[0:1]
var b []int= []int{1,2,3,4,5}

直接建立:

a := make([]int,5)//初始元素個數爲5的數組切片,元素初始值爲0
a := make([]int,5,10)//初始元素個數爲5的數組切片,元素初始值爲0,並預留10個元素的存儲空間

len(a):數組切片中當前存儲的元素個數。
cap(a):返回的是數組切片分配的內存空間。

切片沒有刪除功能。

向切片數組中追加值:

第一種:

a := make([]int,5)//初始元素個數爲5的數組切片,元素初始值爲0
a = append(a, 1,2,3)

第二種:

a := []int{1,2,3}
b = append(b,a...)

 切片的拷貝:

slice1 := []int{1,2,3,4,5}
slice2 := []int{3,4,5}
copy(slice2,slice1) //只會複製slice1的前3個元素到slice2中
copy(slice1,slice2) //只會複製slice2的前3個元素到slice1中的前3個位置

切片的排序:

sort.Strings(slice1)
sort.Ints(slice1)

 

5、map

map的建立和初始化第一種:

var a map[string]string = map[string]string{"hello":"world"}

map的建立和初始化第二種:

a := make(map[string]string, 10)
a["hello"] = "world"

相關操做:

val, ok:= a["hello"]     //查找
for k, v := range a {  //遍歷
    fmt.Println(k,v)
}

delete(a, "hello")     //刪除
len(a)                //長度

sync.Map有如下特性:

  • 無須初始化,直接聲明便可。
  • sync.Map 不能使用 map 的方式進行取值和設置等操做,而是使用 sync.Map 的方法進行調用。Store 表示存儲,Load 表示獲取,Delete 表示刪除。
  • 使用 Range 配合一個回調函數進行遍歷操做,經過回調函數返回內部遍歷出來的值。Range 參數中的回調函數的返回值功能是:須要繼續迭代遍歷時,返回 true;終止迭代遍歷時,返回 false。
var scene sync.Map
// 將鍵值對保存到sync.Map
scene.Store("greece", 97)
scene.Store("london", 100)
scene.Store("egypt", 200)
// 從sync.Map中根據鍵取值
fmt.Println(scene.Load("london"))
// 根據鍵刪除對應的鍵值對
scene.Delete("london")
// 遍歷全部sync.Map中的鍵值對
scene.Range(func(k, v interface{}) bool {
    fmt.Println("iterate:", k, v)
    return true
})

6、 列表 list

 Go 語言中,將列表使用 container/list 包來實現,內部的實現原理是雙鏈表。列表可以高效地進行任意位置的元素插入和刪除操做。

列表與切片和 map 不一樣的是,列表並無具體元素類型的限制。

列表的初始化一:

lis := list.New()

列表的初始化二:

var lis list.List

列表的相關操做:

雙鏈表支持從隊列前方或後方插入元素,分別對應的方法是 PushFront 和 PushBack。

提示

這兩個方法都會返回一個 *list.Element 結構。若是在之後的使用中須要刪除插入的元素,則只能經過 *list.Element 配合 Remove() 方法進行刪除,這種方法可讓刪除更加效率化,也是雙鏈表特性之一。

lis := list.New()
// 尾部添加
lis.PushBack("canon")
// 頭部添加
lis.PushFront(67)
// 尾部添加後保存元素句柄
element := lis.PushBack("fist")
// 在fist以後添加high
lis.InsertAfter("high", element)
// 在fist以前添加noon
lis.InsertBefore("noon", element)
// 刪除
lis.Remove(element)
相關文章
相關標籤/搜索