登录
首页 >  Golang >  Go问答

可以在缩小切片后访问切片的底层数组吗?

来源:stackoverflow

时间:2024-02-17 23:48:24 377浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《可以在缩小切片后访问切片的底层数组吗?》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

给定一个类型,例如:

type licensecards struct {
    cards *[]int
}

我不会显示创建切片的代码。但这会删除顶部项目,忽略零长度的情况。

func (licenseCards *LicenseCards) PopLicenseCard() int {
    l := len(*licenseCards.cards)
    ret := (*licenseCards.cards)[l-1]
    *licenseCards.cards = (*licenseCards.cards)[:l-1]
    return ret
}

如果我从切片中删除最后一个项目并返回指向已删除项目的指针,它是否保证仍然可用?


正确答案


正如 @volker 所说,如果有东西正在使用内存,gc 不会释放它。

代码的另一点是,在使用 .运算符例如:只需这样做:l := len(licensecards.cards)

此外,您不需要卡片接收器都成为指针。如果您不介意的话,我想建议一下:

type LicenseCards struct {
    cards []int
}

func (lc *LicenseCards) PopLicenseCard() int {
    l := len(lc.cards)
    ret := lc.cards[l-1]
    lc.cards = lc.cards[:l-1]
    return ret
}

今天关于《可以在缩小切片后访问切片的底层数组吗?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>