[Golang nâng cao] Tìm hiểu về & và * trong golang
Post on: 2023-06-14 00:01:07
Trong ngôn ngữ lập trình Go (Golang), các ký tự & và * được sử dụng để làm việc với con trỏ và giá trị tham chiếu.
1. &
(Ampersand) - Địa chỉ của (Address of):
-
&
được sử dụng để lấy địa chỉ của một biến trong bộ nhớ. Nó trả về con trỏ đến biến đó. -
Ví dụ:
package main
import "fmt"
func main() {
x := 10
fmt.Println(&x) // In địa chỉ của biến x
}
import "fmt"
func main() {
x := 10
fmt.Println(&x) // In địa chỉ của biến x
}
Kết quả sẽ là một con trỏ đến biến x
.
2.*
(Asterisk) - Giá trị của (Value of) hoặc Đánh dấu con trỏ (Dereference):
-
*
được sử dụng để lấy giá trị mà một con trỏ đang trỏ tới. Nó trích xuất giá trị từ địa chỉ được chỉ định bởi con trỏ. -
*
cũng được sử dụng để khai báo con trỏ trong Go. -
Ví dụ:
package main
import "fmt"
func main() {
x := 10
ptr := &x // Lấy địa chỉ của biến x và gán cho con trỏ ptr
fmt.Println(*ptr) // In giá trị mà con trỏ ptr đang trỏ tới
}
import "fmt"
func main() {
x := 10
ptr := &x // Lấy địa chỉ của biến x và gán cho con trỏ ptr
fmt.Println(*ptr) // In giá trị mà con trỏ ptr đang trỏ tới
}
Kết quả sẽ là giá trị của biến x
, tức là 10.
3. Sử dụng &
và *
cùng nhau:
-
Khi sử dụng cả
&
và*
cùng nhau,&
sẽ trả về một con trỏ và*
sẽ giải tham chiếu con trỏ để lấy giá trị. -
Ví dụ:
package main
import "fmt"
func main() {
x := 10
ptr := &x // Lấy địa chỉ của biến x và gán cho con trỏ ptr
*ptr = *ptr + 5 // Tăng giá trị mà con trỏ ptr đang trỏ tới lên 5
fmt.Println(x) // In giá trị mới của biến x (15)
fmt.Println(*ptr) // In giá trị mà con trỏ ptr đang trỏ tới (15)
}
import "fmt"
func main() {
x := 10
ptr := &x // Lấy địa chỉ của biến x và gán cho con trỏ ptr
*ptr = *ptr + 5 // Tăng giá trị mà con trỏ ptr đang trỏ tới lên 5
fmt.Println(x) // In giá trị mới của biến x (15)
fmt.Println(*ptr) // In giá trị mà con trỏ ptr đang trỏ tới (15)
}
Kết quả sẽ là 15 trong cả hai lệnh in.
Lưu ý rằng trong Go, con trỏ không phổ biến và thường được sử dụng trong một số trường hợp đặc biệt như tương tác với C hoặc khi làm việc với cấu trúc dữ liệu phức tạp. Thông thường, Go ưu tiên việc sử dụng giá trị tham chiếu hơn là con trỏ.