內置函式
1.close: 主要是用來關閉channel
2.len:用來求長度,比如string、array、slice、map、channel
3.new與make都是用來分配記憶體
new用來分配值型別,如int、string,回傳的是指標
make用來分配參考型別,如chan、map、slice
new創建的指標指向變數,make進行變數的初始化
4.append用來追加元素到陣列、slice中
5.panie和recover,用來做錯誤處理
閉包
1,一個函式和與其相關的飲用環境組合而成的物體
package main
import "fmt"
func Addr() func(int) int {
var x int
return func(d int) int {
x +=d
return x
}
}
func main() {
f := Addr()
fmt.Println(f(1))
fmt.Println(f(100))
fmt.Println(f(1000))
}
陣列
1.陣列:
是同一種資料型別的固定長度的序列
2.陣列定義
var a [len]int
3.長度是資料型別的一部分,因此,var a[5] int和var a[10] int是不同型別
4.資料可以通過下標進行訪問,下標是從0開始,最后一個元素的下標為len-1
5.訪問越界,如果下標在陣列合法范圍之外,則觸發訪問越界,會panic
6.陣列的初始化
a.var age() [5]int = [5] int{1,2,3,4,5}
b.var age() = [5]int{1,2,3,4,5}
c.var age = [...]int {1,2,3,4,5}
d.var str = [5]string{3:"hello world",4:"tom"}
7.多維陣列
a.var age [5][3]int
b.var f [2][3]int = [...][3]int{{1,2,3},{4,5,6}}
切片
1.切片,切片是陣列的一個參考,因此切片是參考型別
2.切片的長度可以改變,因此,切片是一個可變陣列
3.切片遍歷方式和陣列一樣,可以用len()求長度
4.cap可以求出slice最大的容量,0<=len(slice) <=cap(array),其中arrayshi slice參考的陣列
5.切片的定義
var 變數名 []型別,比如 var str []string var arr []int
6.切片的初始化:
var slice []int = arr[start:end]
var slice []int = arr[0:end] 簡寫為 var slice []int = arr[:]
var slice []int = arr[start:len(arr)]簡寫為var slice[]int = arr[start:]
var slice []int = arr[0,len(arr)]簡寫為 var slice[]int = arr[:]
7.通過make創建切片
var slice []type = make([]type,len)
slice := make([]type,len)
slice := make([]type,len,cap)
8.用append內置函式操作切片
slice = append(slice,10)
var a = []int {1,2,3}
var b = []int {4,5,6}
a = append(a,b...)
9.切片拷貝
s1 := []int{1,2,3,4,5}
s2 := make([]int,10)
copy(s2,s1) // copy不會擴容,append會,
s3 := []int{1,2,3}
s3 = append(s3,s2...)
s3 = append(s3,4,5,6)
10.字串改字符
s := "hello world"
s1 := []rune(s) //[]byte(s)
s1[0] = '0'
str := string(s1)
排序
1.sort.Ints()對證書進行排序
2.sort.String對字符和竄進行排序
3.sort.Float64s對浮點型進行排序
4.sort.SearchInte(a []int,b int)從陣列a中查找b,前提是a有序
5.sort.SearchFloats(a []float64,b float64)從陣列a中查找b,前提是a有序
7.sort.SearchStrings(a []string,b string)從陣列a中查找b,前提是a有序
map
1.key-value的資料結構,又叫字典或關聯陣列
a.宣告
var map1 map[keytype]valuetype
var a map[string]string
var a map[string]int
var a map[int]string
var a map[string]map[string]string
//宣告不會分配記憶體,初始化需要make
鎖
1.互斥鎖
sync.Mutex
var lock sync.Mutex
func test() {
var a map[int]int
a = make(map[int]int)
a[7] = 10
a[5] = 10
a[3] = 10
a[1] = 10
for i :=0;i<3;i++{
go func(b map[int]int){
lock.Lock()
b[8] = rand.Intn(100)
lock.Unlock()
}(a)
lock.Lock()
fmt.Println(a)
lock.Unlock()
time.sleep(time.Second)
}
}
2.讀寫鎖
var mu sync.RWMutex
go build -race 目錄 檢測代碼是否有沖突
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/30711.html
標籤:Go
下一篇:go 基礎 -1
