我正在使用 Golang1.14。這是測試代碼。package mainimport "time"func checkData(data interface{}) { if _, ok := data.([]string); ok { println("Assert true.") } else { println("Assert false.") }}func main() { var years [20]string for i := 0; i < 20; i++ { years[i] = string(time.Now().Year() - 10 + i) } checkData(years) foods := []string{"Fruit", "Grass", "Fish", "Meat"} checkData(foods)}輸出是:Assert false.Assert true.我是 Golang 的新手,真的很困惑,這[20]string不是一個[]string。有人能告訴我為什么嗎?謝謝。
為什么 [容量] 字符串?dāng)嘌缘?[] 字符串會在 Golang 中失?。?/h1>
1 回答

30秒到達(dá)戰(zhàn)場
TA貢獻(xiàn)1828條經(jīng)驗 獲得超6個贊
[20]string
是一個數(shù)組。它是一個包含 20 個字符串的類型,如果將其作為 interface{} 傳遞,則可以使用intf.([20]string)
.
[]string
是一片。它有一個支持?jǐn)?shù)組,但它本質(zhì)上是一個數(shù)組視圖。你斷言檢查接口是否是一個切片,所以這個可以工作。
數(shù)組和切片在 Go 中是不同的東西。數(shù)組是具有固定大小的數(shù)據(jù)類型。例如:
func f(arr [10]int) {...}
您只能f
使用大小為 10 的 int 數(shù)組進(jìn)行調(diào)用。當(dāng)您調(diào)用它時,該數(shù)組將作為值傳遞,因此該函數(shù)將獲取該數(shù)組的副本,其中包含它的所有 10 個成員。但:
func f(arr []int) {...}
您可以f
使用任何大小的切片進(jìn)行調(diào)用。切片包含對其底層數(shù)組的引用,因此此處不會發(fā)生數(shù)組副本。您不能this
使用數(shù)組調(diào)用 f`。
- 1 回答
- 0 關(guān)注
- 139 瀏覽
添加回答
舉報
0/150
提交
取消