Go語言基礎篇(2) —— Go語言經常使用的數據結構

學習目標

掌握常見數據類型的使用數組


布爾類型

var v1 bool //默認值爲false
v1 = true 
v2 := (1 == 2) // v2也會被推導爲bool類型

數值類型

整型:app

int八、byte、int1六、int、uint、uintptr等。函數

類型 長度(字節) 取值範圍
int8 1 -128 ~ 127
uint8(即byte) 1 0 ~ 255
int16 2 -32 768 ~ 32 767
uint16 2 0 ~ 65 535
int32 4 -2 147 483 648 ~ 2 147 483 647
uint32 4 0 ~ 4 294 967 295
int64 8 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
uint64 8 0 ~ 18 446 744 073 709 551 615
int 平臺相關 平臺相關
uint 平臺相關 平臺相關
uintptr 同指針 在32位平臺下爲4字節,64位平臺下爲8字節

int和int32在Go語言裏被認爲是兩種不一樣的類型,編譯器也不會幫你自動 作類型轉換學習

支持的位運算符:ui

運算 含義 樣例
x << y 左移 124 << 2 // 結果爲496
x >> y 右移 124 >> 2 // 結果爲31
x ^ y 異或 124 ^ 2 // 結果爲126
x & y 124 & 2 // 結果爲0
x|y 124|2 // 結果爲126
^x 取反 ^2 // 結果爲3

浮點類型:指針

float3二、float64。code

不能直接用==來判斷兩個浮點數是否相等索引

能夠這樣判斷浮點型的大小:three

import "math" 
 
// p爲用戶自定義的比較精度,好比0.00001 
func IsEqual(f1, f2, p float64) bool {   
    return math.Fdim(f1, f2) < p  
}

複數類型:字符串

complex6四、complex128。

複數實際上由兩個實數(在計算機中用浮點數表示)構成,一個表示實部(real),一個表示 虛部(imag)。若是瞭解了數學上的複數是怎麼回事,那麼Go語言的複數就很是容易理解了。

  1. 複數表示

    複數表示的示例以下:

    var value1 complex64    // 由2個float32構成的複數類型 
    value1 = 3.2 + 12i
    value2 := 3.2 + 12i     // value2是complex128類型 
    value3 := complex(3.2, 12)  // value3結果同 value2
  2. 實部與虛部

    對於一個複數z = complex(x, y),就能夠經過Go語言內置函數real(z)得到該複數的實 部,也就是x,經過imag(z)得到該複數的虛部,也就是y。

    go語言不支持隱式轉換(對比Java的隱式轉換)


**字符串:**string。

var str string  // 聲明一個字符串變量 ,默認值爲""

切片和數組

數組聲明:

//數組定義
var a[3]int //聲明並初始化默認值爲0
a[0] = 1 //給第一個數賦值爲1
b := [3]int{1,2,3} //聲明同時初始化
c := [2][2]int{1, 2}, {3, 43} //多維數組初始化
d := [...]int{1,2,3,4,5}//自動匹配長度

數組遍歷:

arr3 := [...]int{1, 3, 4, 5}

	for i := 0; i < len(arr3); i++ {
		t.Log(arr3[i])
	}
	
	//i 是索引,不使用索引用_代替
	for i, e := range arr3 {
		t.Log(e,i)
	}

數組的截取:

a[開始索引(包含),結束索引(不包含)]

a := [...]int{1, 2, 3, 4, 5} 
a[1:2] //結果: 2
a[1:3] //結果: 2,3
a[1:Len(a)] //結果: 2,3,4,5 
a[1:] //結果: 2,3,4,5 
a[:3] //結果: 1,2,3
切片

相似於Java中的集合List

切片聲明:

//切片定義
var s0 [] int //初始長度爲0
s0 = append(s0,1)//填充數據

s := []int{}
s1 := []int{1,2,3} 

/*
 格式: type,len,cap
 其中len個元素會被初始化爲默認零值,未初始化元素不能夠訪問,既,索引爲0,1,2的值初始化爲0能夠訪問,3,4不能夠
 訪問
 cap按2倍增加(相似於Java中list長度的增加因子)
*/
s2 := make([]int,3,5)/

map

map的聲明:

var 變量名 map[key類型] value類型

m := map[string]int{"one": 1, "two": 2, "three": 3}

m1 :=map[string]int{}
m1["one"]=1//向容器中存入數據

m2 :=make(map[string]int, 100 )//設置容量

//判斷值是否存在
if v, ok := m1["one"]; ok {
	//值存在
}

注意:

當key不存在時:會輸出默認值

當key對應的值不存在時:也會返回默認值

map的遍歷:

m1 := map[int]int{1: 1, 2: 4, 3: 9}
	//a是key b是value
	for a, b := range m1 {
		t.Log(a, b)
	}
	//k是key
	for  k := range m1  {
		t.Log(k)
	}
相關文章
相關標籤/搜索