数组
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。
声明数组
var variable_name [SIZE] variable_type var balance [10] float32 fmt.Println(balance) //[0 0 0 0 0 0 0 0 0 0]
初始化数组
var balance =[5]int{1,2,4,5,7} balance:=[5]int{1,2,4,5,7} //字面量
数组推断
如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度
person:=[...]string{"詹","躲躲"} fmt.Println(person) //[詹 躲躲]
初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
var i [10]int fmt.Println(i) //[0 0 0 0 0 0 0 0 0 0]
将索引为 1 和 3 的元素初始化
arr:=[10]string{1:"詹",3:"躲躲"} fmt.Println(arr) //[ 詹 躲躲 ]
多维数组
三维数组
var threedim [2][3][4]int fmt.Println(threedim) //[[[0 0 0 0] [0 0 0 0] [0 0 0 0]] [[0 0 0 0] [0 0 0 0] [0 0 0 0]]] arr:=[][]int{} row1:=[]int{1,2,3} row2:=[]int{4,5,6} arr = append(arr,row1) arr = append(arr,row2) fmt.Println(arr[0]) //[1,2,3] fmt.Println(arr[1]) //[4,5,6]
初始化二维数组
a:=[3][4]int{ {1,2,3,5}, {1,2,3,5}, {1,2,3,5}, } fmt.Println(a) //[[1 2 3 5] [1 2 3 5] [1 2 3 5]] 数组5行2列 arr:=[5][2]int{{0,0},{1,0},{0,2},{0,2},{1,1}} var i,j int for i=0;i<5;i++{ for j=0;j<2;j++{ fmt.Printf("数组元素arr[i][j]:%d\n",i,j,arr[i][j]) } } %!(EXTRA int=0, int=0)数组元素arr[i][j]:0 %!(EXTRA int=1, int=0)数组元素arr[i][j]:1 %!(EXTRA int=0, int=1)数组元素arr[i][j]:1 %!(EXTRA int=1, int=0)数组元素arr[i][j]:2 %!(EXTRA int=0, int=0)数组元素arr[i][j]:2 %!(EXTRA int=1, int=2)数组元素arr[i][j]:3 %!(EXTRA int=0, int=0)数组元素arr[i][j]:3 %!(EXTRA int=1, int=2)数组元素arr[i][j]:4 %!(EXTRA int=0, int=1)数组元素arr[i][j]:4 %!(EXTRA int=1, int=1)
指针
Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址
一个指针变量指向了一个值的内存地址。
var a int =20 //实际变量 var b *int //指针变量
指针变量的存储地址
b = &a fmt.Printf("指针变量的地址:%x",b) //指针变量的地址:c000016098
空指针
var ptr *int fmt.Printf("ptr 的值为 : %x\n", ptr )
语言结构体
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
定义结构体
结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。
type Person struct{ name string age int sex string id string } fmt.Println(Person{"詹躲躲",19,"男","2133321321"}) //{詹躲躲 19 男 2133321321} fmt.Println(Person{name:"詹躲躲",age:19,sex:"男",id:"2133321321"}) //{詹躲躲 19 男 2133321321}
忽略字段
fmt.Println(Person{name:"詹躲躲",age:19}) //{詹躲躲 19}
访问结构体成员
type Person struct{ name string age int sex string id string } var person Person person.name = "许嵩" fmt.Println(person) //{许嵩 0 }
结构体作为函数参数
var person1 Person person1.name = "许巍" var person2 Person person2.name="赵雷" printStruct(person1) //结构体的数据:许巍 printStruct(person2) //结构体的数据:赵雷 type Person struct{ name string age int sex string id string } func printStruct(person Person){ fmt.Printf("结构体的数据:%s",person.name) }
结构体指针
var person1 Person person1.name = "许巍" var person2 Person person2.name="赵雷" printStruct(&person1) //结构体的数据:许巍 printStruct(&person2) //结构体的数据:赵雷 type Person struct{ name string age int sex string id string } func printStruct(person *Person){ fmt.Printf("结构体的数据:%s",person.name) }
语言切片
切片是对数组的抽象。
切片初始化
a:=[]int{1,2,3} //[1 2 3] b:=a[:] //[1 2 3] fmt.Println(a,b)
使用make
a:=make([]int,3,5) fmt.Println(a) //[0 0 0] len() 方法获取长度 cap() 可以测量切片最长可以达到多少 a:=[8]int{1,2,3,4,5,6,7,8} fmt.Println(len(a),cap(a)) //8 8
空的切片
var a []int if(a==nil){ fmt.Println("空的切片") }
切片截取
a:=[8]int{1,2,3,4,5,6,7,8} fmt.Println("原始大小",a) //[1,2,3,4,5,6,7,8] fmt.Println("1-4(不包含4)",a[1:4]) //2,3,4 fmt.Println("0-4(不包含4)",a[:4]) //[1,2,3,4] fmt.Println("4以后的",a[4:]) //5,6,7,8 append() copy() 函数 var numbers []int numbers = append(numbers,1) numbers1:=make([]int,len(numbers),(cap(numbers))*2) copy(numbers1,numbers) fmt.Println(numbers) //[1]
范围(Range)
a:=[5]int{1,2,3,4,5} for i,j :=range a{ fmt.Println(i,j) //0 1 1 2 2 3 3 4 4 5 }
枚举字符串
for i,j :=range "asdsada"{ fmt.Println(i,j) //0 97 1 115 2 100 3 115 4 97 5 100 6 97 }
range也可以用来枚举Unicode字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身
元气满满的一天。明天继续打卡,继续开启GO之旅。