我正在學(xué)習(xí)戈蘭語,同時使用以下代碼練習(xí)切片:package mainimport "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-- }}以下是結(jié)果,我得到:輸入主題名稱:物理len=4 帽=4 [印地語英語數(shù)學(xué)物理]輸入主題名稱:地理位置len=5 cap=8 [印地語 英語 數(shù)學(xué) 物理 地理]為什么容量在5日翻倍,以及如何按適當(dāng)?shù)捻樞蛟黾尤萘?
1 回答

MMMHUHU
TA貢獻(xiàn)1834條經(jīng)驗 獲得超8個贊
在這種情況下,“適當(dāng)順序”不適用。Go 片由一個數(shù)組支持,每次達(dá)到容量時附加到該數(shù)組時,都需要復(fù)制該數(shù)組。通過制作更大容量的數(shù)組,Go試圖最大限度地減少許多復(fù)制操作,從而使功能的性能更高。append
如果您事先知道許多元素,則可以使用它來設(shè)置初始容量:
fmt.Print("Enter total number of subjects:")
fmt.Scan(&count)
subjects := make([]string, 0, count)
Go 不會增大底層陣列,除非您超過初始容量。
- 1 回答
- 0 關(guān)注
- 79 瀏覽
添加回答
舉報
0/150
提交
取消