Biến là một khái niệm cơ bản trong bất kỳ ngôn ngữ lập trình nào, và Golang (hay Go) cũng không ngoại lệ. Biến là một vùng nhớ được đặt tên để lưu trữ dữ liệu có thể thay đổi trong quá trình thực thi chương trình. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về cách khai báo, khởi tạo, và sử dụng biến trong Golang, cùng với các quy tắc và phạm vi của biến.
Khai Báo Biến
1. Sử Dụng Từ Khóa var
Cách phổ biến nhất để khai báo biến trong Golang là sử dụng từ khóa var
. Cú pháp cơ bản như sau:
go
var tên_biến kiểu_dữ_liệu = giá_trị
Ví dụ:
go
package main
import "fmt"
func main() {
var i int = 10
var s string = "Hello, Go!"
fmt.Println(i)
fmt.Println(s)
}
Trong ví dụ trên, chúng ta khai báo hai biến i
và s
với kiểu dữ liệu int
và string
, và khởi tạo chúng với các giá trị tương ứng.
2. Khai Báo Biến Không Khởi Tạo
Nếu không khởi tạo giá trị cho biến, Golang sẽ tự động gán giá trị mặc định (zero value) cho biến đó. Cú pháp như sau:
go
var tên_biến kiểu_dữ_liệu
Ví dụ:
go
package main
import "fmt"
func main() {
var i int
var s string
fmt.Println(i) // Output: 0
fmt.Println(s) // Output: ""
}
Trong ví dụ này, biến i
được gán giá trị mặc định là 0
và biến s
được gán giá trị mặc định là chuỗi rỗng ""
.
3. Khai Báo Biến Ngắn Gọn
Golang cung cấp một cách khai báo biến ngắn gọn sử dụng toán tử :=
. Cú pháp này chỉ có thể được sử dụng bên trong các hàm.
go
tên_biến := giá_trị
Ví dụ:
go
package main
import "fmt"
func main() {
i := 10
s := "Hello, Go!"
fmt.Println(i)
fmt.Println(s)
}
Trong ví dụ này, Golang tự động suy luận kiểu dữ liệu của biến dựa trên giá trị được gán.
Quy Tắc Đặt Tên Biến
Khi đặt tên biến trong Golang, cần tuân theo các quy tắc sau:
- Tên biến phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới (_).
- Tên biến có thể chứa các chữ cái, chữ số và dấu gạch dưới.
- Tên biến không được bắt đầu bằng chữ số.
- Tên biến phân biệt chữ hoa và chữ thường (ví dụ:
car
,Car
, vàCAR
là ba biến khác nhau). - Tên biến bắt đầu bằng chữ cái thường chỉ có thể truy cập trong cùng một package (biến không xuất).
- Tên biến bắt đầu bằng chữ cái hoa có thể truy cập từ các package khác (biến xuất).
Ví dụ:
go
package main
import "fmt"
func main() {
var empName string = "John"
var EmpAddress string = "123 Main St"
fmt.Println(empName)
fmt.Println(EmpAddress)
}
Giá Trị Mặc Định (Zero Value)
Khi khai báo biến mà không khởi tạo giá trị, Golang sẽ gán giá trị mặc định cho biến đó. Các giá trị mặc định phụ thuộc vào kiểu dữ liệu của biến:
int
: 0float32
,float64
: 0.0bool
: falsestring
: ""pointer
,slice
,map
,channel
,function
: nil
Ví dụ:
go
package main
import "fmt"
func main() {
var quantity float32
var price int16
var product string
var inStock bool
fmt.Println(quantity) // Output: 0
fmt.Println(price) // Output: 0
fmt.Println(product) // Output: ""
fmt.Println(inStock) // Output: false
}
Phạm Vi của Biến
Phạm vi của biến xác định vùng mã mà biến có thể được truy cập. Trong Golang, phạm vi của biến được chia thành hai loại chính: biến cục bộ và biến toàn cục.
1. Biến Cục Bộ
Biến cục bộ được khai báo bên trong một hàm hoặc một khối mã và chỉ có thể truy cập trong phạm vi của hàm hoặc khối mã đó.
Ví dụ:
go
package main
import "fmt"
func main() {
var localVar int = 10
fmt.Println(localVar) // Output: 10
}
// fmt.Println(localVar) // Error: undefined local variable
Trong ví dụ này, biến localVar
chỉ có thể truy cập bên trong hàm main
.
2. Biến Toàn Cục
Biến toàn cục được khai báo bên ngoài tất cả các hàm và có thể truy cập từ bất kỳ hàm nào trong cùng một package.
Ví dụ:
go
package main
import "fmt"
var globalVar int = 20
func main() {
fmt.Println(globalVar) // Output: 20
}
func anotherFunction() {
fmt.Println(globalVar) // Output: 20
}
Trong ví dụ này, biến globalVar
có thể truy cập từ cả hai hàm main
và anotherFunction
.
Khai Báo Nhiều Biến
Golang cho phép khai báo nhiều biến trên cùng một dòng hoặc trong cùng một khối mã để tăng tính rõ ràng và dễ bảo trì.
Ví dụ: Khai Báo Trên Cùng Một Dòng
go
package main
import "fmt"
func main() {
var a, b, c int = 1, 2, 3
fmt.Println(a, b, c) // Output: 1 2 3
}
Ví dụ: Khai Báo Trong Một Khối
go
package main
import "fmt"
func main() {
var (
a int = 1
b int = 2
c string = "Hello"
)
fmt.Println(a, b, c) // Output: 1 2 Hello
}
Biến Bị Che Khuất (Variable Shadowing)
Biến bị che khuất xảy ra khi một biến cục bộ có cùng tên với một biến toàn cục. Trong trường hợp này, biến cục bộ sẽ được ưu tiên sử dụng trong phạm vi của nó.
Ví dụ:
go
package main
import "fmt"
var shadowVar int = 100
func main() {
var shadowVar int = 200
fmt.Println(shadowVar) // Output: 200
}
Trong ví dụ này, biến shadowVar
cục bộ trong hàm main
sẽ che khuất biến shadowVar
toàn cục.
Kết Luận
Biến là một phần quan trọng trong lập trình Golang, cho phép lưu trữ và thao tác dữ liệu một cách hiệu quả. Hiểu rõ cách khai báo, khởi tạo, và sử dụng biến sẽ giúp bạn viết mã Golang rõ ràng, hiệu quả và dễ bảo trì hơn. Bài viết này đã cung cấp một cái nhìn tổng quan chi tiết về biến trong Golang, từ các quy tắc đặt tên, giá trị mặc định, phạm vi biến, đến cách khai báo nhiều biến và xử lý biến bị che khuất. Hy vọng rằng bạn sẽ áp dụng những kiến thức này vào các dự án lập trình của mình một cách hiệu quả.