Bài học theo mô-đun (3/5)
Hằng số và iota
Hằng số là các giá trị bất biến được biết đến tại thời điểm biên dịch. Trong Go họ là
được khai báo bằng const và có thể là typed hoặc untyped. Những cái chưa được gõ có một
siêu năng lực: họ thích ứng với loại mà ngữ cảnh yêu cầu, giúp bạn tiết kiệm
khỏi phải viết chuyển đổi rõ ràng.
Cú pháp cơ bản
const PI = 3.14
const MaxRetry int = 5
const Name = "eLearner"MaxRetry được nhập (int): bạn chỉ có thể gán nó cho int.
PI và Name không được gõ: chúng hoạt động giống như "chữ" và thích ứng với
bối cảnh.
const PI = 3.14
var f float32 = PI // ok: PI è non tipata, diventa float32
var d float64 = PI // okconst khối
Bạn có thể nhóm một số hằng số trong một khối:
const (
StateInitial = "INIT"
StateReady = "READY"
StateError = "ERROR"
)iota: bộ đếm điều tra
Bên trong khối const, mã định danh đặc biệt iota bắt đầu từ 0
và tăng thêm 1 trên mỗi dòng. Đó là thành ngữ để thực hiện bảng liệt kê:
const (
Monday = iota // 0
Tuesday // 1
Wednesday // 2
Thursday // 3
Friday // 4
)Các dòng tiếp theo kế thừa biểu thức nếu chúng không cung cấp biểu thức.
Đó là lý do tại sao chỉ cần viết Tuesday là đủ mà không cần lặp lại = iota.
Các mẫu có biểu thức
iota có thể xuất hiện bên trong các biểu thức tùy ý:
const (
KB = 1 << (10 * (iota + 1)) // 1 << 10 = 1024
MB // 1 << 20
GB // 1 << 30
TB // 1 << 40
)Bỏ qua một giá trị
Nếu bạn không muốn gán giá trị cho một dòng (vì bạn muốn iota cho
vẫn tăng), hãy sử dụng mã định danh trống _:
const (
_ = iota // scarta 0
KB // 1
MB // 2
)Đến lượt bạn
Khai báo một hằng số PI có giá trị 3,14 ở cấp gói, sau đó in nó bên trong main.
Hiển thị gợi ý
`const PI = 3.14` nằm ở cấp độ gói, bên ngoài main.
Giải pháp khả dụng sau 3 lần thử
Xác định khối const với các ngày trong tuần (Thứ Hai, Thứ Ba, Thứ Tư) được đánh số từ 1 bằng iota.
Hiển thị gợi ý
Sử dụng `iota + 1` trên dòng đầu tiên của khối; các dòng tiếp theo kế thừa biểu thức.
Giải pháp khả dụng sau 3 lần thử
Chương trình này in gì?
const (
A = iota * 2
B
C
)
fmt.Println(A, B, C)Tóm tắt lại
constcho các giá trị bất biến được biết tại thời điểm biên dịch.- Các hằng số Untyped thích ứng với ngữ cảnh: không cần chuyển đổi.
const ( ... )chặn các giá trị liên quan đến nhóm.iotabắt đầu từ 0 trong mỗi khối và tăng dần theo từng dòng.- Mẫu: enum (
= iota), bitmask (= 1 << iota), đơn vị (= 1 << (10*iota)).