兄弟連go教程(2)型別-常量

尹成發表於2018-07-03
常量值必須是編譯期可確定的數字、字串、布林值。
)
func main() {
const x = "xxx" // 未使⽤用區域性常量不會引發編譯錯誤。
}
const x, y int = 1, 2 // 多常量初始化
const s = "Hello, World!" // 型別推斷
const ( // 常量組
a, b = 10, 100
c bool = false
Go 學習筆記, 第 4 版
10
)
func main() {
const x = "xxx" // 未使⽤用區域性常量不會引發編譯錯誤。
}




不⽀支援 1UL、2LL 這樣的型別字尾。
在常量組中,如不提供型別和初始化值,那麼視作與上⼀一常量相同。
const (
s = "abc"
x // x = "abc"
)


常量值還可以是 len、cap、unsafe.Sizeof 等編譯期可確定結果的函式返回值。
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(b)
)


如果常量型別⾜足以儲存初始化值,那麼不會引發溢位錯誤。
const (
a byte = 100 // int to byte
b int = 1e20 // float64 to int, overflows
)


列舉
關鍵字 iota 定義常量組中從 0 開始按⾏行計數的⾃自增列舉值。
const (
Sunday = iota // 0
Monday // 1,通常省略後續⾏行表示式。
Tuesday // 2
Wednesday // 3
Thursday // 4
Friday // 5
Saturday // 6
)

const (
_ = iota // iota = 0
KB int64 = 1 << (10 * iota) // iota = 1
MB // 與 KB 表示式相同,但 iota = 2
GB
TB
)


在同⼀一常量組中,可以提供多個 iota,它們各⾃自增⻓長。
const (
A, B = iota, iota << 10 // 0, 0 << 10
C, D // 1, 1 << 10
)
如果 iota ⾃自增被打斷,須顯式恢復。
const (
A = iota // 0
B // 1
C = "c" // c
D // c,與上⼀一⾏行相同。
E = iota // 4,顯式恢復。注意計數包含了 C、D 兩⾏行。
F // 5
)


可通過⾃自定義型別來實現列舉型別限制。
type Color int
const (
Black Color = iota
Red
Blue
)
func test(c Color) {}
func main() {
c := Black
test(c)
x := 1
test(x) // Error: cannot use x (type int) as type Color in function argument

test(1) // 常量會被編譯器⾃自動轉換。
}

尹成老師

QQ77025077 

微信18510341407

所有視訊在尹成學院

www.yinchengxueyuan.com

尹成百度雲請聯絡QQ475318423



相關文章