GO语言切片使用注意事项

Go语言切片

Go语言切片(slice)相当于动态数组,可以随意扩展元素。但是我们在使用过程中,还是要稍微注意该语言与其他语言不同的地方的,比如slice如果是截取一个数组的话,实际上是一个指向该数组的指针,其实际容量会受原数组的影响,对slice重新赋值时,有可能影响被截取的数组内容,这在其他语言里是没有的。

以下是一些代码示例 use_slice.go

package main

import "fmt"

func main() {
	arrStr := [...]string{"java", "c","c++","python","c#","basic"}
	sliceStr := arrStr[1:4:5]  //下标一表示起始位置,下标二表示结束位置(不包含该位置元素),下标三表示cap容量 cap=len+1,容量可以设置大于len+1
	fmt.Println("len(arrStr),cap(arrStr)", len(arrStr), cap(arrStr))
	fmt.Println(arrStr)
	fmt.Println("len(sliceStr),cap(sliceStr)", len(sliceStr), cap(sliceStr))
	fmt.Println(sliceStr)

	sliceStr[0] = "Go"
	fmt.Println("after assigning slice, arrStr:")
	sliceStr = append(sliceStr, "ruby")
	fmt.Println(arrStr)  //不超容量重新赋值后之前的数组会跟着改变
	fmt.Println("len(sliceStr),cap(sliceStr)", len(sliceStr), cap(sliceStr))
	fmt.Println(sliceStr)

	sliceStr2 := arrStr[1:4]
	fmt.Println("after assigning slice again")
	sliceStr2 = append(sliceStr2, "ruby", "php", "javascript", "pl-sql")
	fmt.Println(arrStr)  //超容量重新赋值后之前的数组不会跟着改变
	fmt.Println("len(sliceStr2),cap(sliceStr2)", len(sliceStr2), cap(sliceStr2))
	fmt.Println(sliceStr2)

	sliceStr3 := []string{"are","you","ok"}
	var sliceStr4 = make([]string ,3)
	copy(sliceStr4, sliceStr3)  //copy会复制原有切片的值,修改时不影响原有元素。
	var sliceStr5 = make([]string,5,10)

	sliceStr4[0] = "how"
	sliceStr4[1] = "are"
	sliceStr4 = append(sliceStr4, "you")

	sliceStr5 = sliceStr3[0:3]
	sliceStr5 = append(sliceStr5, "do","not")

	fmt.Println(sliceStr3)
	fmt.Println(sliceStr4)
	fmt.Println(sliceStr5)

}

最终运行结果

len(arrStr),cap(arrStr) 6 6
[java c c++ python c# basic]
len(sliceStr),cap(sliceStr) 3 4
[c c++ python]
after assigning slice, arrStr:
[java Go c++ python ruby basic]
len(sliceStr),cap(sliceStr) 4 4
[Go c++ python ruby]
after assigning slice again
[java Go c++ python ruby basic]
len(sliceStr2),cap(sliceStr2) 7 10
[Go c++ python ruby php javascript pl-sql]
[are you ok]
[how are ok you]
[are you ok do not]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值