Chuyển đến nội dung chính
Mô-đun 1 · Bài học 3 trong tổng số 53/50 trong khóa học~10 min
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

Go
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.

Go
const PI = 3.14

var f float32 = PI  // ok: PI è non tipata, diventa float32
var d float64 = PI  // ok

const khối

Bạn có thể nhóm một số hằng số trong một khối:

Go
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ê:

Go
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 ý:

Go
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 _:

Go
const (
    _  = iota // scarta 0
    KB        // 1
    MB        // 2
)

Đến lượt bạn

tập thể dục#go.m1.l3.e1
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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ử

tập thể dục#go.m1.l3.e2
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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ử

Quiz#go.m1.l3.e3
Sẵn sàng

Chương trình này in gì?

Go
const (
    A = iota * 2
    B
    C
)
fmt.Println(A, B, C)
Tùy chọn trả lời

Tóm tắt lại

  • const cho 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.
  • iota bắ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)).