Hai dạng receiver có ngữ nghĩa khác nhau về copy và mutation:
- Value receiver
func (u User) Name()— nhận một copy của struct, không thể modify giá trị gốc. - Pointer receiver
func (u *User) SetName(n string)— modify trực tiếp struct gốc, không tốn chi phí copy.
Dùng pointer receiver khi: cần mutate state, struct lớn (tránh copy), hoặc để giữ consistency — nếu một method dùng pointer thì tất cả method của type đó nên dùng pointer.