package main
import "fmt"
func main() {
person1 := &Person{Name: "Alice", Age: 30}
person2 := person1.Clone().(*Person)
fmt.Printf("%+v %T %p\n", person1, person1, person1)
fmt.Printf("%+v %T %p\n", person2, person2, person2)
// output
// &{Name:Alice Age:30} *main.Person 0xc000094018
// &{Name:Alice Age:30} *main.Person 0xc000094030
}
type Cloneable interface {
Clone() Cloneable
}
type Person struct {
Name string
Age int
}
func (p Person) Clone() Cloneable {
return &Person{
Name: p.Name,
Age: p.Age,
}
}