golang学习笔记struct-继承

  • Post category:other

Golang学习笔记:struct-继承

在Golang中,可以使用struct来定义自定义类型。struct可以包含字段和方法,可以用于面向对象编程。本攻略将介如何在Golang中使用struct实现继承,包括嵌入式结构体和匿名字段。以下是Golang学习笔记struct-继的完整攻略:

1. 嵌入式结构体

嵌入式结构体是指在一个结构体中嵌入另一个结构体。嵌入式结构体可以实现继承的效果。以下是使用嵌入式结构体实现继承的步骤:

  1. 定义父结构体

首先,需要定义一个父结构体,包含一些字段和方法。,定义一个名为“Person”的结构体,包含“name”和“age”字段和“SayHello()”方法。

type Person struct {
 name string
    age  int
}

func (p *Person) SayHello() {
    fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.name, p.age)
}
`

2. 定义子结构体

然后,需要定义一个子结构体,嵌入父结构体。例如,定义一个名为“Student”的结构体,嵌入“Person”结构体,并添加一个“grade”字段。

```go
type Student struct {
    Person
    grade int
}
  1. 使用子结构体

现在,可以使用子结构体“Student”来访问父结构体“Person”的字段和方法。例如,创建一个名为“Tom”的学生,并调用“SayHello()”方法。

func main() {
    tom := Student{
        Person: Person{
            name: "Tom",
            age:  18,
        },
        grade: 12,
    }
    tom.SayHello()
}

输出结果为:

Hello, my name is Tom and I am 18 years old.

示例1:使用嵌入式结构体实现继承

假设需要定义一个名为“Animal”的结构体,包含“name”和“age”字段和“SayHello()”方法。然后,需要定义一个名为“Dog”的结构体,嵌入“Animal”结构体,并添加一个“breed”字段。可以按照以下步骤进行:

  1. 定义父结构体
type Animal struct {
    name string
    age  int
}

func (a *Animal) SayHello() {
    fmt.Printf("Hello, my name is %s and I am %d years old.\n", a.name, a.age)
}
  1. 定义子结构体
type Dog struct {
    Animal
    breed string
}
  1. 使用子结构体
func main() {
    dog := Dog{
        Animal: Animal{
            name: "Buddy",
            age:  3,
        },
        breed: "Golden Retriever",
    }
    dog.SayHello()
}

输出结果为:

Hello, my name is Buddy and I am 3 years old.

2. 匿名字段

匿名字段是指在一个结构体中定义一个没有名字的字段。匿名字段可以实现继承的效果。以下是使用匿名字段实现继承的步骤:

  1. 定义父结构体

首先,需要定义一个父结构体,包含一些字段和方法。例如,定义一个名为“Person”的结构体,包含“name”和“age”字段和“SayHello()”方法。

type Person struct {
    name string
    age  int
}

func (p *Person) SayHello() {
    fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.name, p.age)
}
  1. 定义子结构体

然后,需要定义一个子结构体,包含一个匿名字段,类型为父结构体。例如,定义一个名为“Student”的结构体,包含一个匿名字段,类型为“Person”结构体,并添加一个“grade”字段。

type Student struct {
    Person
    grade int
}
  1. 使用子结构体

现在,可以使用子结构体“Student”来访问父结构体“Person”的字段和方法。例如,创建一个名为“Tom”的学生,并调用“SayHello()”方法。

func main() {
    tom := Student{
        Person: Person{
            name: "Tom",
            age:  18,
        },
        grade: 12,
    }
    tom.SayHello()
}

输出结果为:

Hello, my name is Tom and I am 18 years old.

示例2:使用匿名字段实现继承

假设需要定义一个名为“Animal”的结构体,包含“name”和“age”字段和“SayHello()”方法。然后,需要定义一个名为“Dog”的结体,包含一个匿名字段,类型为“Animal”结构体,并添加一个“breed”字段。可以按照以下步骤进行:

  1. 定义父结构体
type Animal struct {
    name string
    age  int
}

func (a *Animal) SayHello() {
    fmt.Printf("Hello, my name is %s and I am %d years old.\n", a.name, a.age)
}
  1. 定义子结构体
type Dog struct {
    Animal
    breed string
}
  1. 使用子结构体
func main() {
    dog := Dog{
        Animal Animal{
            name: "Buddy",
            age:  3,
        },
        breed: "Golden Retriever",
    }
    dog.SayHello()
}

输出结果为:

Hello, my name is Buddy and I am 3 years old.

总的来说,使用嵌入式结构体和匿名字段都可以实现在Golang中实现继承的效果。需要注意的是,子结构体可以访问父结构体的字段和方法,但是父结体不能访问子结构体的字段和方法。