NGÀY 5 – POINTERS, STRUCTS & METHODS

date
Dec 12, 2025
slug
pointers-structs-method
status
Published
tags
Go Lang
summary
Mục tiêu: hiểu cơ chế tham chiếu/tham trị trong Go, nắm struct, method và cách chúng hoạt động với pointer receivers.
type
Post

Bài – Tạo struct Person

Yêu cầu:
  • name string
  • age int
  • city string
  • Method Hello() in ra câu: "Hi, I’m {name} from {city}"
  • Method GrowUp() tăng tuổi +1
package main import "fmt" type Person struct { name string age int city string } func (p *Person) Hello() { fmt.Printf("Hi, I’m %s from %s\n", p.name, p.city) } func (p *Person) GrowUp() { p.age += 1 } func main() { p := Person{name: "Alice", age: 20, city: "Hanoi"} p.Hello() p.GrowUp() fmt.Printf("%s is now %d years old.\n", p.name, p.age) }
package main import "fmt" type User struct { ID int Name string Email string Age int } func NewUser(id int, name, email string, age int) User { return User{ ID: id, Name: name, Email: email, Age: age, } } // pointer receiver to update email func (u *User) UpdateEmail(newEmail string) { u.Email = newEmail } // value receiver for age check func (u User) IsAdult() bool { return u.Age >= 18 } func (u User) PrintInfo() { fmt.Printf("User Info:\n ID: %d\n Name: %s\n Email: %s\n Age: %d\n", u.ID, u.Name, u.Email, u.Age) } func main() { user := NewUser(1, "Alice", "[email protected]", 20) user.PrintInfo() fmt.Println("Is adult:", user.IsAdult()) user.UpdateEmail("[email protected]") fmt.Println("After email update:") user.PrintInfo() }