前言
前面学习了Go数据类型中的数字、字符串,下面看看Go中是否有Python中的list、dict等复合数据类型?
需要注意的是在Go中数组是可变类型+值(拷贝)类型,而go中切片是引用类型;
数组声明之后它里面的元素是可以被修改,如果把1个数组变量引用到1个新的变量,那么这个新的变量会重新拷贝一份旧数组的数组。
Python中的list是可变+引用数据类型
llist1 = ["A", "B", "C"]
llist2=llist1
llist1[0]= "a"llist2[2] = "b"
print(llist1, id(llist1))print(llist2, id(llist2))"""['a', 'B', 'b'] 42775624
['a', 'B', 'b'] 42775624"""
Python的list可变+引用
Golang中的arry是可变+拷贝数据类型
package main
import"fmt"func main() {
arry1 := [3]string{"A", "B", "C"} //注意声明arry变量时不要忘记[指定长度],否则声明的是slice变量
arry2 :=arry1
arry1[0] = "a"arry2[1] = "b"
//说明go中的arry不是引用类型,单属于可变数控类型可以原处修改
fmt.Printf("%v %p\n", arry1, &arry1)
fmt.Printf("%v %p\n", arry2, &arry2)
}/*[a B C] 0xc000062330
[A b C] 0xc000062360*/
Golang的arry可变+拷贝
Python的list切片之后会开辟1开新的内存生产1个新的list数据类型
nameList=["张","根"]
firstName=nameList[0]
lastName=nameList[1]print(firstName)print(lastName)#Python的list切片会开辟1块新的内存,创建1个新的列表。
nameSlice=nameList[0:2]
nameSlice[0]="Martin"nameSlice[1]="Zhang"
print(nameList,nameSlice)print(type(nameList),type(nameSlice))print(id(nameList),id(nameSlice))'''张
根
['张', '根'] ['Martin', 'Zhang']
42632648 42632712'''
Python的list切片
Golang的arry切片之后会开辟1个新的内存生成1个slice数据类型
package main
import ("fmt"
"reflect")
func main() {
nameArry:=[2]string{"张","根"}//1.获取数组的长度
fmt.Println(len(nameArry))//2.通过数组索引取值
firstName:=nameArry[0]
lastName:=nameArry[1]
fmt.Println(firstName)
fmt.Println(lastName)//3.数组组切片
nameSlice:=nameArry[0:2]
nameSlice[0]="Martin"nameSlice[1]="Zhange"fmt.Println(nameArry,nameSlice)//[Martin Zhange] [Martin Zhange]
fmt.Println(reflect.TypeOf(nameArry),reflect.TypeOf(nameSlice)) //[2]string(数组类型)-------- []string(切片类型)
fmt.Printf("切片之前的内存地址:%p,切片之后的slice内存地址:%p--",&nameArry,nameSlice)
}
Golang的Arry切片
package main
import "fmt"
func main() {
//声明1个字符串变量
var name string
fmt.Println(name)
//声明1个数组变量
var a1 [3]int
fmt.Println(a1)
//声明1个切片类型的变量
var s1 []int
fmt.Println(s1 == nil)
//声明二维数