切片是引用数据类型
切片是引类型的数据,存储了底层数组的引用
package main
import "fmt"
func main() {
//1.数组:值类型
a1:=[4]int{1,2,3,4}
a2:=a1//值传递
fmt.Println(a1,a2)
a1[0]=100
fmt.Println(a1,a2)
//2.切片
s1:=[]int {1,2,3,4}
s2:=s1
fmt.Println(s1,s2)
s1[0]=100
fmt.Println(s1,s2)
fmt.Printf("%p\n",s1)
fmt.Printf("%p\n",s2)
fmt.Printf("%p\n",&a1)
fmt.Printf("%p\n",&a2)
}
深拷贝和浅拷贝
package main
import "fmt"
func main() {
/*
深拷贝:拷贝的是数据本身。
值类型的数据,默认都是深拷贝:array,int,float,
string,bool,struct
浅拷贝:拷贝的是数据地址
导致多个变量指向同一块内存
引用类型的数据,默认都是浅拷贝:slice,map
*/
s1:=[]int{1,2,3,4}
s2:=make([]int,0)
for i:=0;i<len(s1);i++ {
s2=append(s2,s1[i])
}
fmt.Println(s1)
fmt.Println(s2)
s1[0]=100
fmt.Println(s1)
fmt.Println(s2)
s3:=[]int{7,8,9}
fmt.Println(s2)
fmt.Println(s3)
//copy(s2,s3)//将s3中元素拷贝到s2中
//copy(s3,s2)
copy(s3[1:],s2[2:])
fmt.Println(s2)
fmt.Println(s3)
}
map初识
package main
import "fmt"
func main() {
/*
map:映射,是一种专门用于存储键值对的集合,属于引用类型
存储特点:
A.存储的是无序的键值对
B.键不能重复,并且和value值一一对应的
map中key不能重复。如果重复,新的value会覆盖原来的。
语法结构:
1.创建map
*/
//创建map
var map1 map[int]string
var map2=make(map[int]string)
var map3=map[string]int{"Go":98,"Python":87,"java":79,"Html":93}
fmt.Println(map1)
fmt.Println(map2)
fmt.Println(map3)
}