切片容量翻倍

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


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 帽=4 [印地语英语数学物理]


输入主题名称:地理位置


len=5 cap=8 [印地语 英语 数学 物理 地理]


为什么容量在5日翻倍,以及如何按适当的顺序增加容量


POPMUISE
浏览 55回答 1
1回答

MMMHUHU

在这种情况下,“适当顺序”不适用。Go 片由一个数组支持,每次达到容量时附加到该数组时,都需要复制该数组。通过制作更大容量的数组,Go试图最大限度地减少许多复制操作,从而使功能的性能更高。append如果您事先知道许多元素,则可以使用它来设置初始容量:fmt.Print("Enter total number of subjects:")fmt.Scan(&count)subjects := make([]string, 0, count)Go 不会增大底层阵列,除非您超过初始容量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go