MST

星途 面试题库

面试题:Go语言结构体嵌套与方法集关联

在Go语言中,定义三个结构体:`Base`、`Middle`和`Top`,`Middle`嵌套`Base`,`Top`嵌套`Middle`。为`Base`定义一个方法`BaseMethod`,请解释如何在`Top`的实例上调用`BaseMethod`,以及Go语言在这种嵌套结构体方法调用时的查找规则,并写出相应代码验证你的解释。
37.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 调用方法及查找规则解释
    • 在Go语言中,当结构体嵌套时,外层结构体可以直接调用内层结构体的方法。对于Top实例调用BaseMethod,Go语言会按照结构体嵌套的层次从外层到内层查找方法。因为Top嵌套MiddleMiddle又嵌套Base,所以当在Top实例上调用BaseMethod时,会先在Top结构体本身查找是否有BaseMethod方法,如果没有则会去Top所嵌套的Middle结构体中查找,若Middle结构体中也没有,则会继续去Middle所嵌套的Base结构体中查找,找到后就会调用该方法。
  2. 示例代码
package main

import "fmt"

// Base结构体定义
type Base struct{}

// BaseMethod是Base结构体的方法
func (b *Base) BaseMethod() {
    fmt.Println("This is BaseMethod")
}

// Middle结构体嵌套Base
type Middle struct {
    Base
}

// Top结构体嵌套Middle
type Top struct {
    Middle
}
  1. 测试调用代码
func main() {
    t := Top{}
    t.BaseMethod()
}

在上述代码中,Top结构体通过嵌套关系,可以直接调用Base结构体的BaseMethod方法。在main函数中创建Top的实例t,然后调用t.BaseMethod(),即可成功调用Base结构体的BaseMethod方法。