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

Go
var name string = "Ada"
var age int = 36
var active bool

Khi 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:

Go
name := "Ada"   // string
age := 36        // int
pi := 3.14       // float64
active := true   // bool

Những kiểu cơ bản bạn sẽ gặp ngay

LoạiVí dụGhi chú
int42kích thước phụ thuộc vào CPU (32 hoặc 64 bit)
float643.14mặc định cho chữ thập phân
string"Ada"UTF-8, bất biến
booltrue, falsekhô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
byte0x7Fbí 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 :=:

Go
var (
    name   string = "Ada"
    age    int    = 36
    active bool
)

x, y := 10, 20
a, b, c := "a", 2, true   // different types: no problem

Cá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.

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

Go
_ = x

Đến lượt bạn

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

Sử dụng var để khai báo tên biến kiểu chuỗi có giá trị 'Ada' và in nó.

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

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

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.

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

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

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?

Go
// (a)
var name string = "Ada"

// (b)
age := 36

// (c)
const PI = 3.14
Tùy chọn trả lời

Tóm tắt lại

  • Loại tĩnh, được tự động suy ra bởi := hoặc được khai báo bằng var.
  • := chỉ bên trong các hàm; chỉ ở cấp gói var/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/bool bao gồm 90% các trường hợp hàng ngày.