Bài học theo mô-đun (1/5)
Biến và loại
Trong Go, mọi biến đều có loại tĩnh được trình biên dịch biết đến: một lần đã khai báo, một biến không thể thay đổi kiểu. Sự cứng nhắc này - rất khác từ JavaScript hoặc Python - là cái giá bạn phải trả để có được thời gian biên dịch lỗi thay vì lỗi thời gian chạy, tệp nhị phân nhỏ và có thể dự đoán được hiệu suất.
Hai hình thức khai báo
var với loại rõ ràng
var name string = "Ada"
var age int = 36
var active boolKhi bạn bỏ qua giá trị (như trong var active bool), biến sẽ nhận được
giá trị 0 thuộc loại của nó — chúng ta sẽ quay lại vấn đề này trong bài học tiếp theo.
Khai báo ngắn :=
Bên trong một hàm, bạn có thể sử dụng :=, hàm này suy ra loại từ
biểu thức bên phải. Đây là dạng thành ngữ và là dạng bạn sẽ sử dụng
90% thời gian:
name := "Ada" // string
age := 36 // int
pi := 3.14 // float64
active := true // boolNhững kiểu cơ bản bạn sẽ gặp ngay
| Loại | Ví dụ | Ghi chú |
|---|---|---|
int | 42 | kích thước phụ thuộc vào CPU (32 hoặc 64 bit) |
float64 | 3.14 | mặc định cho chữ thập phân |
string | "Ada" | UTF-8, bất biến |
bool | true, false | không có "sự thật", chỉ có bool thuần túy |
rune | 'A' | bí danh int32, đại diện cho điểm mã Unicode |
byte | 0x7F | bí danh của uint8 |
Ngoài ra còn có int8/16/32/64, uint8/16/32/64, float32 và complex64/128
khi bạn cần kích thước chính xác (phân tích cú pháp nhị phân, tương tác, v.v.).
Nhiều khai báo
Bạn có thể khai báo một số biến bằng khối var hoặc số nhiều :=:
var (
name string = "Ada"
age int = 36
active bool
)
x, y := 10, 20
a, b, c := "a", 2, true // different types: no problemCác biến được khai báo nhưng không được sử dụng
Go rất nghiêm ngặt: một biến được khai báo và không bao giờ sử dụng là một biến biên dịch
lỗi chứ không phải cảnh báo. Điều tương tự cũng áp dụng cho imports chưa sử dụng.
func main() {
x := 42
// error: x declared and not used
}Để tạm thời tắt quy tắc, bạn sử dụng _ (mã định danh trống):
_ = xĐến lượt bạn
Sử dụng var để khai báo tên biến kiểu chuỗi có giá trị 'Ada' và in nó.
Hiển thị gợi ý
Dạng dài là `var <name> <type> = <value>`.
Giải pháp khả dụng sau 3 lần thử
Trên một dòng, sử dụng := để gán 36 cho độ tuổi và 'Roma' cho thành phố, sau đó in cả hai.
Hiển thị gợi ý
Bạn có thể gán nhiều biến cùng một lúc: `a, b := 1, "due"`.
Giải pháp khả dụng sau 3 lần thử
Khai báo nào sau đây tạo ra lỗi biên dịch nếu đặt BÊN NGOÀI hàm?
// (a)
var name string = "Ada"
// (b)
age := 36
// (c)
const PI = 3.14Tóm tắt lại
- Loại tĩnh, được tự động suy ra bởi
:=hoặc được khai báo bằngvar. :=chỉ bên trong các hàm; chỉ ở cấp góivar/const.- Các biến không được sử dụng và nhập = lỗi biên dịch: sử dụng
_để tắt chúng. int/float64/string/boolbao gồm 90% các trường hợp hàng ngày.