MST
星途 面试题库

面试题:Go语言中嵌入式结构体的匿名字段访问规则

在Go语言中,给定两个结构体A和B,B嵌入了A作为匿名字段。请解释如何访问A中的方法和字段,以及访问的优先级是怎样的。同时,请举例说明如何在B的实例中调用A的方法。
35.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

访问A中的方法和字段

当结构体B嵌入结构体A作为匿名字段时,可以通过B的实例直接访问A中的方法和字段。

访问优先级

  1. 字段访问优先级:如果B结构体中定义了与A结构体中同名的字段,通过B实例访问该字段时,优先访问B中定义的字段。只有当B中不存在该名字的字段时,才会去访问A中的字段。
  2. 方法访问优先级:如果B结构体中定义了与A结构体中同名的方法,通过B实例调用该方法时,优先调用B中定义的方法。只有当B中不存在该名字的方法时,才会去调用A中的方法。

示例代码

package main

import "fmt"

// 定义结构体A
type A struct {
    FieldA string
}

// A的方法
func (a A) MethodA() {
    fmt.Println("This is MethodA in struct A")
}

// 定义结构体B,嵌入结构体A
type B struct {
    A
    FieldB string
}

func main() {
    b := B{
        A: A{
            FieldA: "Value from A",
        },
        FieldB: "Value from B",
    }

    // 访问A中的字段
    fmt.Println(b.FieldA)

    // 调用A中的方法
    b.MethodA()
}

在上述代码中,结构体B嵌入了结构体A。在main函数中,创建了B的实例b,通过b.FieldA访问了A中的字段,通过b.MethodA()调用了A中的方法。