[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
}

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
}

Kết quả sẽ là giá trị của biến x, tức là 10.

3. Sử dụng &* cùng nhau:

  • Khi sử dụng cả &* 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)
}

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ỏ.