面试题答案
一键面试在Go语言中,接口初始化常见有以下两种方式:
1. 实现接口的结构体实例赋值给接口变量
- 原理:Go语言中接口的实现是隐式的,只要一个类型实现了接口中定义的所有方法,那么这个类型的实例就可以赋值给该接口类型的变量。
- 示例代码:
package main
import "fmt"
// 定义一个接口
type Animal interface {
Speak() string
}
// 定义一个结构体
type Dog struct {
Name string
}
// Dog结构体实现Animal接口的Speak方法
func (d Dog) Speak() string {
return fmt.Sprintf("Woof! My name is %s", d.Name)
}
func main() {
// 创建Dog结构体实例
myDog := Dog{Name: "Buddy"}
// 将Dog结构体实例赋值给Animal接口变量
var myAnimal Animal = myDog
fmt.Println(myAnimal.Speak())
}
2. 使用匿名结构体初始化接口
- 原理:通过匿名结构体直接实现接口的方法,并将其赋值给接口变量,这种方式适用于只在局部使用一次且不需要单独定义结构体类型的场景。
- 示例代码:
package main
import "fmt"
// 定义一个接口
type Printer interface {
Print()
}
func main() {
// 使用匿名结构体初始化Printer接口
var p Printer = struct {
Message string
}{
Message: "Hello, this is an anonymous struct implementing Printer interface",
}
p.Print = func() {
fmt.Println(p.Message)
}
p.Print()
}