Go Fundamentals: Khai báo biến
Tất cả chương trình mà bạn viết, về cơ bản chỉ là làm 3 việc: cấp phát bộ nhớ, đọc và ghi dữ liệu vào bộ nhớ.
Đây là bài viết nằm trong series Go Fundamentals.
Trong Go, biến (variable) là tên của một vùng nhớ được cấp phát (allocate) để lưu trữ dữ liệu thuộc một kiểu nhất định. Có nhiều cách khác nhau để khai báo biến trong Go.
Khai báo biến với từ khóa var
1. Khai báo 1 biến
Cú pháp để khai báo biến trong Go
var name typevar:từ khóa của go dành cho việc khai báo biếnname:tên của biếntype:kiểu dữ liệu mà bạn muốn lưu trữ
Ví dụ:
package main
import "fmt"
func main() {
var age int // khai bao bien
fmt.Println("Age:", age)
}“
var age int” khai báo biến có tên làagevới kiểu dữ liệu làint(số nguyên). Go sẽ cấp cho bạn một vùng nhớ đủ lớn để lưu trữ bất kỳ giá trị nào có kiểuint, và đặt cho vùng nhớ này một cái tên làage.Vì không có giá trị khởi tạo nên Go sẽ gán
zero-valuecho biến này. Zero-value của kiểuintlà0. Zero-value sẽ được đề cập trong phần sau.Chương trình trên in ra kết quả:
Age: 0
2. Gán giá trị cho biến
Biến cho thể được gán cho các giá trị khác nhau miễn là giá trị đó thuộc kiểu mà nó được khai báo.
Ví dụ biến age có thể được gán cho bất kỳ số nguyên nào:
package main
import "fmt"
func main() {
var age int // khai bao bien
fmt.Println("Age:", age)
age = 18 // gan gia tri 18
fmt.Println("Age:", age)
age = 28 // gan gia tri 28
fmt.Println("Age:", age)
}Chương trình trên sẽ in ra:
Age: 0
Age: 18
Age: 28Lưu ý: Trong Go, bạn không thể gán cho biến một giá trị khác với kiểu mà nó được khai báo. Ví dụ:
var age int
age = "Nhan" // lỗi, bạn không thể gán giá trị kiểu string cho một biến kiểu int3. Khai báo với giá trị khởi tạo
Khi khai báo biến, chúng ta có thể gán giá trị ban đầu cho nó với cú pháp:
var name type = valueVới
valuelà giá trị khởi tạo,valuephải là giá trị thuộc kiểutype
package main
import "fmt"
func main() {
var age int = 18 // khai bao bien voi gia tri khoi tao
fmt.Println("Age:", age)
}Chương trình trên in ra kết quả:
Age: 18Như vậy là biến age đã được khởi tạo với giá trị mặc định là 18 thành công.
4. Kiểu ngầm định (type inference)
Khi khai báo biến với giá trị khởi tạo, các bạn có thể bỏ qua việc khai báo kiểu dữ liệu. Lúc đó, Go sẽ tự động xác định kiểu của giá trị khởi tạo và gán kiểu này cho biến luôn.
package main
import "fmt"
func main() {
var age = 18 // int
fmt.Println("Age:", age)
}Biến age sẽ được ngầm hiểu có kiểu int, cùng kiểu với giá trị khởi tạo 18.
5. Khai báo nhiều biến cùng lúc
Bạn có thể khai báo nhiều hơn 1 biến trong cùng một câu lệnh.
a. Khai báo nhiều biến cùng kiểu
Cú pháp:
var name1, name2, ..., nameN type = value1, value2, ..., valueNVí dụ:
package main
import "fmt"
func main() {
var age, point int = 18, 90
fmt.Println("Age:", age, "- Point:", point)
}Kết quả in ra:
Age: 18 - Point: 90Bạn có thể bỏ phần khai báo kiểu dữ liệu, Go cũng sẽ dùng kiểu của giá trị khởi tạo:
package main
import "fmt"
func main() {
var age, point = 18, 90 // int
fmt.Println("Age:", age, "- Point:", point)
}Nếu không có giá trị khởi tạo, zero-value sẽ được gán cho các biến:
package main
import "fmt"
func main() {
var age, point int // zero-value: 0, 0
fmt.Println("Age:", age, "- Point:", point)
age = 18
point = 90
fmt.Println("Age:", age, "- Point:", point)
}Kết quả in ra:
Age: 0 - Point: 0
Age: 18 - Point: 90Để ngắn gọn hơn, bạn có thể gán biến age và point trong cùng một câu lệnh:
package main
import "fmt"
func main() {
var age, point int // zero-value: 0, 0
fmt.Println("Age:", age, "- Point:", point)
age, point = 18, 90 // gan 2 bien bang 1 cau lenh
fmt.Println("Age:", age, "- Point:", point)
}
b. Khai báo nhiều biến khác kiểu
Cú pháp:
var (
name1 type1 = value1
name2 type2 = value2
...
nameN type3 = valueN
)Bạn có thể khai báo cả type và value, hoặc chỉ cần có 1 trong 2 là được. Ví dụ:
package main
import "fmt"
func main() {
var (
name string = "Nhan"
age = 18 // int
point int // zero-value: 0
)
fmt.Println("Name:", name, "- Age:", age, "- Point:", point)
}
Kết quả in ra:
Name: Nhan - Age: 18 - Point: 0Ngoài ra bạn cũng có thể khai báo theo kiểu sau:
var name1, name2, ..., nameN = value1, value2, ..., valueNVí dụ sau vẫn in ra cùng kết quả như trên:
package main
import "fmt"
func main() {
var name, age, point = "Nhan", 18, 0
fmt.Println("Name:", name, "- Age:", age, "- Point:", point)
}Khai báo biến kiểu ngắn gọn
Ngoài kiểu khai báo biến với từ khóa var, Go còn cung cấp một cách khai báo khác ngắn gọn hơn với cú pháp:
name := valueVí dụ:
package main
import "fmt"
func main() {
age := 18
fmt.Println("Age:", age)
}Kết quả in ra:
Age: 18Bạn cũng có thể khai báo nhiều biến cùng lúc với kiểu khai báo này:
package main
import "fmt"
func main() {
name, age, point := "Nhan", 18, 90
fmt.Println("Name:", name, "- Age:", age, "- Point:", point)
}Kết quả in ra:
Name: Nhan - Age: 18 - Point: 90Lưu ý:
Số lượng biến ở bên trái
:=phải bằng với số lượng giá trị khởi tạo. Ví dụ:name, age, point := "Nhan", 18 // bên trái := có 3 biến nhưng chỉ có 2 giá trị khởi tạo => lỗiKiểu khai báo biến này chỉ hợp lệ khi vế bên trái của “
:=” có ít nhất 1 biến chưa được khởi tạo trước đó. Ví dụ:package main import "fmt" func main() { a, b := 1, 2 // khởi tạo a, b fmt.Println("a:", a, "b:", b) // a: 1 b: 2 b, c := 3, 4 // b đã khởi tạo, chỉ khởi tạo c fmt.Println("b:", b, "c:", c) // b: 3 c: 4 // b, c := 5, 6 // sẽ lỗi vì cả b, c đều đã được khởi tạo rồi b, c = 5, 6 // gán giá trị mới cho b, c fmt.Println("b:", b, "c:", c) // b: 5 c: 6 }
Tóm tắt
Khai báo biến là một phần quan trọng trong lập trình Go, cho phép quản lý và lưu trữ dữ liệu hiệu quả. Với Go, bạn có thể sử dụng nhiều cách khai báo biến, từ cú pháp với từ khóa var đến cách khai báo ngắn gọn với :=.
Hãy tiếp tục theo dõi series Go Fundamentals để khám phá thêm về ngôn ngữ Go nhé!
Phòng GYM
Phòng GYM là nơi để bạn có thể ôn luyện các kiến thức được đề cập trong bài. Nghiên cứu chỉ ra rằng việc ôn tập và thực hành thường xuyên sẽ giúp học sâu và ghi nhớ kiến thức lâu hơn.
Giải thích sự khác nhau giữa việc khai báo biến bằng từ khóa
varvà khai báo biến ngắn gọn với:=.Viết một chương trình sử dụng khai báo nhiều biến cùng lúc với:
Một biến kiểu chuỗi lưu tên của bạn.
Một biến kiểu số nguyên lưu năm sinh.
Một biến kiểu số nguyên lưu điểm số.
In kết quả dưới dạng sau (không có ngoặc vuông):
"Tên: [name], Năm sinh: [year], Điểm: [point]".


