欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

go:内置函数 | 闭包 | 数组 | 切片 | 排序 | map | 锁

程序员文章站 2022-05-18 23:48:52
内置函数 1.close: 主要是用来关闭channel 2.len:用来求长度,比如string、array、slice、map、channel 3.new与make都是用来分配内存 new用来分配值类型,如int、string,返回的是指针 make用来分配引用类型,如chan、map、slic ......
内置函数
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 目录 检测代码是否有冲突