登录
首页 >  Golang >  Go问答

翻倍切片容量

来源:stackoverflow

时间:2024-03-11 10:09:28 295浏览 收藏

从现在开始,努力学习吧!本文《翻倍切片容量》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我正在学习 golang,同时使用以下代码练习切片:

package main

import "fmt"

func main() {

    var count int
    var subject string
    subjects := make([]string, 0)

    fmt.Print("Enter total number of subjects:")
    fmt.Scan(&count)

    for count != 0 {
        fmt.Print("\n\nEnter subject name: ")
        fmt.Scan(&subject)
        subjects = append(subjects, subject)
        fmt.Printf("\nlen=%d \ncap=%d \n%v\n", len(subjects), cap(subjects), subjects)
        count--
    }

}

以下是结果,我得到:

输入学科名称:物理学 len=4 cap=4 [印地文英语数学物理] 输入学科名称:地理 len=5 cap=8 [印地文英语数学物理地理]

为什么5号容量会翻倍以及如何按正确顺序增加容量


正确答案


“正确顺序”一词在此情况下不适用。 go 切片由一个数组支持,当达到容量时,每次追加到该数组时都需要复制该数组。通过制作更大容量的数组,go 试图最小化复制操作的数量,从而使 append 函数性能更高。

如果您事先知道一些元素,则可以使用它来设置初始容量:

fmt.Print("Enter total number of subjects:")
fmt.Scan(&count)

subjects := make([]string, 0, count)

除非超出初始容量,否则 go 不会增加底层数组。

到这里,我们也就讲完了《翻倍切片容量》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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