发布时间:2024-12-23 03:57:46
``` type Person struct { name string age int } ```
我们可以使用结构体来创建新的对象实例,并访问其字段。例如,我们可以创建一个名为person的Person对象,并设置其name和age字段的值:``` person := Person{name: "Alice", age: 25} fmt.Println(person.name) // 输出:Alice fmt.Println(person.age) // 输出:25 ```
``` func (p Person) SayHello() { fmt.Println("Hello, my name is", p.name) } ```
要调用这个方法,我们需要先创建一个Person对象,并通过对象调用SayHello方法:``` person := Person{name: "Alice", age: 25} person.SayHello() // 输出:Hello, my name is Alice ```
``` func (p *Person) IncreaseAge() { p.age++ } ```
我们可以通过对象的指针调用IncreaseAge方法,来增加该对象的年龄:``` person := &Person{name: "Alice", age: 25} person.IncreaseAge() fmt.Println(person.age) // 输出:26 ```
``` type Person struct { name string age int } func (p *Person) GetName() string { return p.name } ```
在上面的代码中,GetName方法是一个公共的方法,它返回Person对象的name字段。然而,直接访问name字段是不可能的,因为它是私有的。 通过这种方式,我们可以将实现细节隐藏起来,并提供公共的方法来访问和修改私有字段。``` type Animal struct { name string } func (a *Animal) SayHello() { fmt.Println("Hello, my name is", a.name) } type Cat struct { Animal } func main() { cat := Cat{Animal{name: "Kitty"}} cat.SayHello() // 输出:Hello, my name is Kitty } ```
在这个示例中,Cat结构体嵌入了Animal结构体。通过这种方式,Cat结构体不仅继承了Animal结构体的字段name,还继承了Animal结构体上的SayHello方法。 这也展示了面向对象编程中的多态性。虽然Cat结构体没有自己的SayHello方法,但通过嵌入Animal结构体并调用SayHello方法,它可以表现出与Animal相同的行为。