Go学习笔记(二)

Go学习笔记(二)

集合数据

  • 数组

  • 切片

  • 映射

数组array

  • 同类元素的集合,连续地址
  • 定义包括元素类型、数组长度
  • 声明后类型、长度均不可变
  • 类型相同、长度不同不能相互复制
//	只声明未赋值
//	初始化数据为0
var arr1 [5]int

//	声明并直接赋值
arr2:=[3]int{11,12,13}

//	可以不填写长度但是长度依然是定长
arr3 := [...]int{1,3,5,7,9,11}

//	特殊位置初始化 [0]=99, [3]=100
arr4 := [4]int{0:99,3:100}

fmt.Printf("%v %v",arr1,arr2)
//	打印出来带中括号
数组复制

数组变量之间复制的时候会拷贝整个数组(值拷贝)

数组传参数
  • 实参拷贝一份给形参,之后二者相互独立
  • 传递大数组作为参数的时候,尽量使用指针
func changeLocal(num [5]int){
  fmt.Printf("%v",num);
}

func main(){
  num := [...]int{5,6,7,8};
  changeLocal(num);
}
数组遍历
  • for遍历
  • range遍历
a := [...]float64{67.7,89.9,345.5}
for i,v := range a{
  
}
多维数组
a := [3][2]string{
  {"",""},
  {"",""},
  {"",""},		//最后一个对象也有逗号
}

切片slice

  • 就是封装了底层数组的一个可变数组工具
  • 引用类型,不支持==运算
  • 切片三个变量
    • 底层数组指针
    • 切片当前长度
    • 切片容量(小于等于底层数组容量,超过时要变更底层的数组)
切片的声明
var indentifier []dataType
//声明后,切片为空,数组指针也为空

i := make([]int,5,5)	
//	为什么不用构造函数构造?
//	因为:像这样的比较底层的数组声明,更关注类型,用一些底层的内置函数,可复用性更强
new 和 make的区别
  • 两个都是内建函数,主要用来在堆上进行分配类型的内存
  • new用于普通类型的内存分配,内存清零
创建切片
  • 创建指定底层数组
ā := [5]int{}
s1 := a[0:4]	//这个是前闭后开,具体长度为0到3元素
  • 同时创建数组和切片
c := [3]int{6,7,8}

//	也可以不确定大小
a := []int{7,8,9}
b := [...]int{1,2,3,4}
切片长度和容量
  • 内置函数len() 返回切片的当前长度

  • 内置函数cap() 返回切片底层数组容量

arr := [7]int{}
sli := arr[1:3]

//	sli的长度为2,容量为6

映射map

personSalary := map[string]int{  "steve":12000,  "jamie":15000,}personSalary["mike"] = 9000
多维映射

string.FieldsFunc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值