1 回答

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
不,如果您使用帶有“range”子句的“for”語句,規(guī)范指定了索引的類型int:
Range expression 1st value 2nd value
array or slice a [n]E, *[n]E, or []E index i int a[i] E
string s string type index i int see below rune
map m map[K]V key k K m[k] V
channel c chan E, <-chan E element e E
你對(duì)此無能為力,也不應(yīng)該對(duì)此做任何事情。切片/數(shù)組的長(zhǎng)度將適合int.
不可能使切片大于 max int。嘗試使用常量表達(dá)式制作更大的切片是編譯時(shí)錯(cuò)誤:
x := make([]struct{}, 3123456789)
編譯時(shí)錯(cuò)誤: len argument too large in make([]struct {})
注意:的大小int是特定于實(shí)現(xiàn)的:它是 32 位或 64 位。這里產(chǎn)生錯(cuò)誤的常量表達(dá)式是針對(duì) 32 位int的(Go Playground 使用 32 位int)。
如果 length 是一個(gè)運(yùn)行時(shí)表達(dá)式,它會(huì)發(fā)生恐慌:
i := uint(3123456789)
y := make([]struct{}, i)
運(yùn)行時(shí)錯(cuò)誤: panic: runtime error: makeslice: len out of range
數(shù)組類型的長(zhǎng)度也必須符合int:Spec: Array types:
長(zhǎng)度是數(shù)組類型的一部分;它必須評(píng)估為可由 type 值表示的非負(fù)常量int。
嘗試使用更大的長(zhǎng)度是一個(gè)編譯時(shí)錯(cuò)誤:
var x [3123456789]struct{}
type t1 [3123456789]byte
type t2 [3123456789]struct{}
所有編譯時(shí)錯(cuò)誤: array bound is too large
- 1 回答
- 0 關(guān)注
- 263 瀏覽
添加回答
舉報(bào)