Trong Go, con trỏ (pointer) là một kiểu dữ liệu đặc biệt cho phép bạn lưu trữ địa chỉ bộ nhớ của một biến khác thay vì giá trị của biến đó. Sử dụng con trỏ có thể giúp bạn tối ưu hóa bộ nhớ và cho phép các hàm thay đổi giá trị của các biến mà không cần sao chép chúng.
Con trỏ là một biến chứa địa chỉ của một biến khác. Kiểu con trỏ được xác định bằng cách thêm dấu *
trước kiểu dữ liệu. Ví dụ, *int
là kiểu con trỏ trỏ đến một biến kiểu int
.
var ptr *int // Khai báo một con trỏ đến kiểu int
Khi bạn tạo ra một biến, bạn có thể lấy địa chỉ của biến đó bằng cách sử dụng toán tử &
. Địa chỉ này có thể được gán cho một con trỏ.
package main import ( "fmt" ) func main() { a := 10 var ptr *int // Khai báo một con trỏ đến kiểu int ptr = &a // Gán địa chỉ của biến a cho con trỏ ptr fmt.Println("Giá trị của a:", a) // Kết quả: 10 fmt.Println("Địa chỉ của a:", &a) // Kết quả: Địa chỉ của a fmt.Println("Giá trị của ptr:", ptr) // Kết quả: Địa chỉ của a fmt.Println("Giá trị mà ptr trỏ tới:", *ptr) // Kết quả: 10 }
ptr = &a
gán địa chỉ của a
cho con trỏ ptr
.*
trước con trỏ ptr
để truy cập giá trị mà nó trỏ tới, tức là giá trị của a
.Con trỏ cho phép bạn thay đổi giá trị của biến mà nó trỏ tới. Điều này rất hữu ích trong các tình huống mà bạn muốn truyền biến vào hàm và cho phép hàm đó thay đổi giá trị của biến.
package main import ( "fmt" ) func updateValue(val *int) { *val = 20 // Thay đổi giá trị của biến mà con trỏ trỏ tới } func main() { a := 10 fmt.Println("Giá trị ban đầu của a:", a) // Kết quả: 10 updateValue(&a) // Gửi địa chỉ của a vào hàm fmt.Println("Giá trị của a sau khi thay đổi:", a) // Kết quả: 20 }
updateValue
nhận một con trỏ đến kiểu int
. Khi bạn truyền địa chỉ của a
vào hàm, hàm có thể thay đổi giá trị của a
thông qua con trỏ.Con trỏ có thể không trỏ đến bất kỳ biến nào, được gọi là con trỏ nil. Điều này có thể được sử dụng để kiểm tra xem con trỏ có chứa giá trị hợp lệ hay không.
package main import ( "fmt" ) func main() { var ptr *int // Con trỏ nil if ptr == nil { fmt.Println("Con trỏ ptr không trỏ tới bất kỳ biến nào") } }
Con trỏ trong Go là một công cụ mạnh mẽ cho phép bạn làm việc với địa chỉ bộ nhớ của các biến, giúp tối ưu hóa bộ nhớ và cho phép thay đổi giá trị biến từ bên trong các hàm. Việc hiểu rõ về con trỏ và cách sử dụng chúng có thể cải thiện hiệu suất và khả năng mở rộng của ứng dụng Go của bạn.