int là pointer type, &x lấy address, p dereference.
Go không có pointer arithmetic như C. nil pointer gây panic.
go
x := 42
p := &x // p là *int, trỏ đến x
fmt.Println(*p) // 42 — dereference
*p = 100
fmt.Println(x) // 100 — modify qua pointer
// Dùng pointer để modify tham số
func increment(n *int) {
*n++
}
increment(&x)
// Pointer receiver — modify struct gốc
func (u *User) SetAge(age int) {
u.Age = age
}Dùng pointer khi:
- muốn modify giá trị gốc.
- struct lớn (tránh copy).
- method cần modify receiver