美文网首页GoGo面试宝典
Go一道考察slice的面试题

Go一道考察slice的面试题

作者: 流芳不待人 | 来源:发表于2018-04-09 20:16 被阅读18次

解释下面现象:

func main() {
    s := []int{5}
    s = append(s, 7)
    s = append(s, 9)
    x := append(s, 11)
    y := append(s, 12)

    fmt.Println(s, x, y)
}
//结果是:[5 7 9] [5 7 9 12] [5 7 9 12]

因为slice相当于数组的视图,实际保存数据的是数组。当向slice添加元素时实际是在向数组中添加。
如果添加的数据超过了数组cap的大小,就会重新申请一个更大的数组,将元素复制过去。

这里的s原本的cap值是4,追加元素没有超过4,所以一直都是在同一个数组里操作。

func main() {
    s := []int{5}
    fmt.Println(cap(s)) //1
    
    s = append(s, 7)
    fmt.Println(cap(s)) //2
    
    s = append(s, 9)
    fmt.Println(cap(s)) //4
    
    x := append(s, 11)
    y := append(s, 12)

    fmt.Println(s, x, y) //[5 7 9] [5 7 9 12] [5 7 9 12]
}

相关文章

  • Go一道考察slice的面试题

    解释下面现象: 因为slice相当于数组的视图,实际保存数据的是数组。当向slice添加元素时实际是在向数组中添加...

  • 彻底理解Golang Slice

    看完这篇文章,下面这些高频面试题你都会答了吧 Go slice的底层实现原理 Go array和slice的区别 ...

  • Go语言——Slice分析

    Go语言——Slice分析 源码很不好找,在go\src\runtime\slice.go。 根据容量cap*元素...

  • Go slice那些事

    今晚闲来无事,总结一下Go的slice slice是什么slice在Go中的原型?slice类似数组,是一种定长的...

  • 深入理解 Go Slice

    原文地址:深入理解 Go Slice 是什么 在 Go 中,Slice(切片)是抽象在 Array(数组)之上的特...

  • Go语言的常量与变量使用注意事项

    一、变量 Go是静态类型,不能在运行期改变变量的类型。 面试题 这是一个关于Go语言全局变量声明和赋值的考察,Go...

  • Go Slice 最大容量大小是怎么来的

    原文地址:Go Slice 最大容量大小是怎么来的 前言 在《深入理解 Go Slice》中,我们提到了 “根据其...

  • Go 分组 & 排序

    其中,排序的代码是 go sdk 提供的 go1.16.4/src/sort/slice.go :

  • Go-数组与slice

    本文将讲解Go语言中的数组与slice。之前看到网上好多 《深入理解slice》、《深入解析slice》... 的...

  • go slice

    切片创建和初始化 slice := make([]string, 5) slice := make([]int,3...

网友评论

    本文标题:Go一道考察slice的面试题

    本文链接:https://www.haomeiwen.com/subject/mvcwhftx.html