Go 菜鸟学习笔记-快速入门(下)

本文是Go语言初学者的学习笔记,涵盖了切片、范围、Map、递归函数、数据类型转换、接口、错误处理、并发、通道和缓冲区等内容。详细解释了Go语言中切片的声明、初始化、容量与长度的关系,以及如何通过append函数增加容量。还讨论了Go的并发特性,包括goroutine和通道,并介绍了通道的缓冲区。最后提到了Go的错误处理和并发中的通道控制读写权限。
摘要由CSDN通过智能技术生成

Go语言切片

Go语言中切片和数组的区别?

  1. 数组长度不可改变
  2. 切片是对数组的抽象,相对于数组来说,是一种“动态数组”,切片长度不是固定的,可以追加元素,
    感觉和Java 中的 array 与 list 的关系 很像

常见操作
1.声明方式

//1.声明一个未指定大小的数组来定义切片
var identifier []type 
//2.使用make()函数来创建切片
var slice1 []type = make([]type , len)
slice1 := make([]type ,len)
slice2 := make([]T, len, capacity) //也可以指定容量,len 是数组的长度并且也是切片初始长度

2.初始化

//直接初始化切片,[] 表示是切片类型,{1,2,3} 初始化值依次是 1,2,3,其 cap=len=3
s :=[] int {
   1,2,3 } 
//使用数组初始化切片
s := arr[:] 
s := arr[startIndex:endIndex] 
s := arr[startIndex:] 
s := arr[:endIndex] 
//使用切片s 初始化切片 s1
s1 := s[startIndex:endIndex] 
//使用内置函数make() 初始化切片s
s :=make([]int,len,cap) 

len() 和 cap() 函数

func main() {
   
   var numbers = make([]int,3,5)

   printSlice(numbers)
}

func printSlice(x []int){
   
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

//结果:len=3 cap=5 slice=[0 0 0]

空切片(nil)

func main() {
   
   var numbers []int

   printSlice(numbers)

   if(numbers == nil){
   
      fmt.Printf("切片是空的")
   }
}

func printSlice(x []int){
   
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

//结果:
//len=0 cap=0 slice=[]
//切片是空的

切片的截取
可以通过设置下限及上限来设置截取切片 [lower-bound:upper-bound]

func main() {
   
   /* 创建切片 */
   numbers := []int{
   0,1,2,3,4,5,6,7,8}  
   printSlice(numbers)

   /* 打印原始切片 */
   fmt.Println("numbers ==", numbers)

   /* 打印子切片从索引1(包含) 到索引4(不包含)*/
   fmt.Println("numbers[1:4] ==", numbers[1:4])

   /* 默认下限为 0*/
   fmt.Println("numbers[:3] ==", numbers[:3])

   /* 默认上限为 len(s)*/
   fmt.Println("numbers[4:] ==", numbers[4:])

   numbers1 := make([]int,0,5)
   printSlice(numbers1)

   /* 打印子切片从索引  0(包含) 到索引 2(不包含) */
   number2 := numbers[:2]
   printSlice(number2)

   /* 打印子切片从索引 2(包含) 到索引 5(不包含) */
   number3 := numbers[2:5]
   printSlice(number3)

}

func printSlice(x []int){
   
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

结果

len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8]
numbers == [0 1 2 3 4 5 6 7 8]
numbers[1:4] == 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值