在 Go 里是 —— 不變的。它們?cè)诰幾g時(shí)生成,即便是局部定義在函數(shù)里。它只能是數(shù),字串或布爾。因?yàn)榫幾g態(tài)的限制,定義它們的表達(dá)式必須是常量表達(dá)式,可以被編譯器求值。例如,1<<3 是常量表達(dá)式, math.Sin(math.Pi/4) 不是,因?yàn)?math.Sin 的函數(shù)調(diào)用發(fā)生在運(yùn)行態(tài)。
Go 的列舉常量可用 iota 生成。 因?yàn)?iota 可以是表達(dá)式的一部分,并且表達(dá)式可以隱含重復(fù),打造一套精致的值可以變得很容易。
type ByteSize float64
const (
_ = iota? // ignore first value by assigning to blank identifier
KB ByteSize = 1<<(10*iota)
MB
GB
TB
PB
EB
ZB
YB
)