面试题答案
一键面试在Go语言中,可以通过将未命名结构体类型嵌入到其他结构体中来实现代码复用和逻辑清晰化。以下是一个示例:
package main
import "fmt"
// 基础功能的未命名结构体类型
type base struct {
id int
name string
}
func (b *base) printInfo() {
fmt.Printf("ID: %d, Name: %s\n", b.id, b.name)
}
// 扩展功能的结构体,嵌入base结构体
type extended struct {
base
extraInfo string
}
func main() {
ext := extended{
base: base{
id: 1,
name: "example",
},
extraInfo: "additional information",
}
// 访问嵌入结构体的字段
fmt.Println("ID:", ext.id)
fmt.Println("Name:", ext.name)
fmt.Println("Extra Info:", ext.extraInfo)
// 调用嵌入结构体的方法
ext.printInfo()
}
嵌入后访问字段和方法的特点:
- 字段访问:嵌入结构体的字段可以像直接定义在外部结构体中一样直接访问,如
ext.id
和ext.name
。这使得代码更简洁,不需要通过中间结构体实例来访问字段。 - 方法调用:嵌入结构体的方法也可以直接通过外部结构体实例调用,如
ext.printInfo()
。这实现了代码复用,外部结构体无需重新实现这些方法。 - 名称冲突:如果外部结构体定义了与嵌入结构体相同名称的字段或方法,外部结构体的定义将覆盖嵌入结构体的定义,避免了命名冲突。
- 类型关系:虽然外部结构体包含嵌入结构体,但它们之间并没有严格的继承关系。嵌入结构体只是一种组合方式,通过这种方式实现代码复用和逻辑组织。