MST

星途 面试题库

面试题:Go语言中嵌入式结构体的匿名字段特性

在Go语言中,简述嵌入式结构体匿名字段的特点,并且举例说明如何通过匿名字段来实现方法的继承与复用。
33.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

匿名字段特点

  1. 简化访问:可以直接访问匿名字段的成员,无需通过匿名字段名作为中间层。例如,若结构体A嵌入了结构体BB作为A的匿名字段),A的实例可以直接访问B的成员。
  2. 名字冲突:如果不同层次的匿名字段有相同名字的成员,访问时会优先选择最内层定义的成员。
  3. 方法继承:匿名字段的方法会“提升”到包含它的结构体中,使得包含它的结构体仿佛拥有这些方法。

方法继承与复用示例

package main

import "fmt"

// 定义一个基础结构体
type Animal struct {
    Name string
}

// 为Animal结构体定义一个方法
func (a Animal) Speak() {
    fmt.Printf("%s makes a sound\n", a.Name)
}

// 定义一个继承自Animal的结构体
type Dog struct {
    Animal
    Breed string
}

func main() {
    // 创建Dog实例
    myDog := Dog{
        Animal: Animal{Name: "Buddy"},
        Breed:  "Golden Retriever",
    }
    // Dog实例可以直接调用Animal的Speak方法
    myDog.Speak() 
}

在上述示例中,Dog结构体嵌入了Animal结构体作为匿名字段。这样Dog结构体就继承了AnimalSpeak方法,myDog实例可以直接调用Speak方法,实现了方法的复用。