Chuyển đến nội dung chính
Mô-đun 2 · Bài học 1 trong tổng số 56/50 trong khóa học~10 min
Bài học theo mô-đun (1/5)

câu lệnh if, else và init

Trong Go, cú pháp if là cú pháp cổ điển nhưng có hai điểm khác biệt quan trọng so với C/Java: không có dấu ngoặc đơn xung quanh điều kiện và khả năng khai báo một biến tạm thời trực tiếp trong if (câu lệnh init).

Cú pháp cơ bản

Go
if temperatura > 30 {
    fmt.Println("caldo")
} else if temperatura > 20 {
    fmt.Println("mite")
} else {
    fmt.Println("fresco")
}

Dấu ngoặc nhọn là bắt buộc, ngay cả đối với các khối một dòng. các điều kiện phải thuộc loại bool: không có "tính trung thực" như Python hoặc JS.

Go
n := 0
// if n { ... }   // ERRORE: int non è bool
if n != 0 { ... }  // ok

Câu lệnh init: phạm vi giới hạn ở if

Bạn có thể khai báo một biến hợp lệ chỉ bên trong if/else, tách nó khỏi điều kiện bằng ;:

Go
if v, err := call(); err == nil {
    fmt.Println("ok", v)
} else {
    fmt.Println("ko", err)
}
// qui v ed err NON esistono più

Đó là mẫu thành ngữ để xử lý lỗi mà không làm ô nhiễm phạm vi bên ngoài.

Tạo bóng trong phạm vi if

Nếu một biến ngoài bị "bị che khuất" bởi init, thì bên trong nếu phiên bản địa phương thắng. Ngay sau đó, cái bên ngoài lại xuất hiện.

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)  // mai stampato (3 < 5)
} else {
    fmt.Println("else:", x)    // 3
}
fmt.Println("dopo:", x)         // 10 — quella esterna

Không có toán tử ternary

Cờ vây không có cond ? a : b. Đối với các bài tập có điều kiện, bạn cần có if/else trong 3-4 dòng - đó là một lựa chọn thiết kế để dễ đọc.

Go
var label string
if age >= 18 {
    label = "adulto"
} else {
    label = "minore"
}

Hãy thử nó

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

In 'positivo', 'zero' hoặc 'negativo' tùy thuộc vào giá trị của n.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Chuỗi `if / else if / else` có các điều kiện trên dấu hiệu.

Giải pháp khả dụng sau 3 lần thử

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

Sử dụng câu lệnh init để khai báo v := 42 trong if và chỉ in nó nếu v >= 18.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Cú pháp: `if init; điều kiện { ... }`.

Giải pháp khả dụng sau 3 lần thử

Quiz#go.m2.l1.e3
Sẵn sàng

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

Go
x := 10
if x := 3; x > 5 {
    fmt.Println("dentro:", x)
} else {
    fmt.Println("else:", x)
}
fmt.Println("dopo:", x)
Tùy chọn trả lời

Tóm tắt lại

  • Điều kiện không có dấu ngoặc đơn, dấu ngoặc nhọn luôn bắt buộc.
  • Điều kiện phải là bool: không hàm ý tính trung thực.
  • Ban đầu if v, err := f(); err == nil { ... } giới hạn phạm vi v và err.
  • Shadowing init: chú ý không đổ bóng các biến bên ngoài.
  • Không có ternary: viết if/else mở rộng.