面试题答案
一键面试- 接口初始化常见方式:
- 实现类型实例赋值给接口类型变量:Go语言中接口初始化通常是通过将实现了该接口的类型的实例赋值给接口类型的变量来完成。
- 定义接口并初始化示例:
package main import "fmt" // 定义一个接口 type Printer interface { Print() } // 定义一个结构体类型并实现Printer接口 type Message struct { content string } func (m Message) Print() { fmt.Println(m.content) } func main() { // 初始化接口,将实现了接口的Message实例赋值给接口类型变量 var p Printer msg := Message{content: "Hello, Go Interface!"} p = msg p.Print() }
- 初始化过程要点:
- 实现所有方法:实现接口的类型必须实现接口定义的所有方法,否则编译会报错。例如,如果
Printer
接口新增一个方法,Message
类型没有实现这个新方法,就无法将Message
实例赋值给Printer
接口变量。 - 接口是隐式实现:Go语言中类型实现接口不需要像其他语言那样显式声明实现某个接口,只要类型实现了接口的所有方法,就被认为实现了该接口。所以在初始化时,只要确保实现类型的正确性即可。
- 空接口类型:空接口
interface{}
可以表示任何类型,在初始化空接口时,可以将任意类型的值赋给它。例如:
但使用空接口时需要注意类型断言等操作,以确保类型安全。var empty interface{} num := 10 empty = num
- 实现所有方法:实现接口的类型必须实现接口定义的所有方法,否则编译会报错。例如,如果