想象一下,Nokia和iPhone能互相打电话聊天,这不是科幻电影,而是Go语言接口的魔法世界。
一、什么是Go接口?一个比喻让你秒懂
简单来说,Go语言中的接口就是一种行为约定,它只定义该做什么,而不关心是谁来做、怎么做。
回想一下生活中的插座接口:它规定了电压、插孔形状等标准,你的手机、电脑、电视只要插头符合这个标准,就都能通电使用。至于这些设备内部如何工作,插座完全不关心。
Go接口的核心设计理念:关注行为而非数据。它只关心一个类型能做什么,而不关心这个类型是什么。
来看一个最简单的Go接口定义:
// 定义Phone接口:约定"打电话"的行为
type Phone interface {
call() // 接口仅声明方法签名(无具体实现)
}
这就是Go语言的接口——轻量、简洁、直击要害。
二、接口的实战:当Nokia遇上iPhone
理论说多了容易睡着,来看一个活生生的例子:
package main
import (
"fmt"
)
// 1. 定义Phone接口:约定"打电话"的行为
type Phone interface {
call() // 接口仅声明方法签名(无具体实现)
}
// 2. 定义NokiaPhone结构体:具体的手机类型
type NokiaPhone struct {
// 结构体可无字段,仅通过方法实现接口
}
// 3. NokiaPhone实现Phone接口的call()方法(值接收者)
func (nokiaPhone NokiaPhone) call() {
fmt.Println("I am Nokia, I can call you!")
}
// 4. 定义IPhone结构体:另一种手机类型
type IPhone struct {
}
// 5. IPhone实现Phone接口的call()方法(值接收者)
func (iPhone IPhone) call() {
fmt.Println("I am iPhone, I can call you!")
}
func main() {
// 6. 定义接口变量phone(类型为Phone接口)
var phone Phone
// 7. 接口变量赋值为NokiaPhone实例,调用call()
phone = new(NokiaPhone) // new(NokiaPhone)返回结构体指针,仍可赋值给接口变量
phone.call()
// 8. 接口变量赋值为IPhone实例,调用call()

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



