golang中的接口

发布于:2025-03-22 ⋅ 阅读:(18) ⋅ 点赞:(0)

1.简介

  1. 在go中的接口是以一种类型,一种抽象的类型。接口(interface)是一组函数method的集合,go中的接口不能包含任何变量。
  2. 在go中接口中的所有方法都没有方法体,接口定义了一个对象的行为规范,只定义规范不实现。接口体现了程序的多态和高内聚低耦合的思想。
  3. go中的接口也是一种数据类型,不需要显示实现,只需要一个变量含有接口类型中的所有方法,那么这个变量就实现了这个接口。

2.接口的定义 

interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来(实现)。

type 接口名 interface {

method1(参数...)返回值列表

method2(参数...)返回值列表

}

实现:

func (t 自定义类型) method1(参数...)返回值列表{

//方法体

}

func (t 自定义类型) method2(参数...)返回值列表{

//方法体

}

其中:

  • 接口名:使用type将接口定义为自定义类型名,go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口writer,有字符串功能的接口叫Stringer等。接口名最好能突出该接口的类型含义。
  • method:当方法名首字母是大写且这个接口名首字母也是大写,这个方法可以被接口所在的包(package)之外的代码访问。
  • 参数和返回值列表:参数和返回值列表中的参数名可以省略。

3.快速入门

定义一个Usber接口让Phone和Camera结构体实现这个接口。

package main

import "fmt"

// 定义一个接口
type Usber interface {
	//声明了两个没有实现的方法
	start()
	stop()
}

type Phone struct {
}

// 手机要实现usb接口的化必须得实现usb接口中的所有方法
func (p Phone) start() {
	fmt.Println("手机开始工作了")
}
func (p Phone) stop() {
	fmt.Println("手机停止工作了")
}

type Camera struct {
}

// 照相机要实现usb接口的化必须得实现usb接口中的所有方法

func (p Camera) start() {
	fmt.Println("照相机开始工作了")
}
func (p Camera) stop() {
	fmt.Println("照相机停止工作了")
}

type Computer struct {
}

// 编写一个方法Working,接口一个Usber接口类型的变量
// 只要实现了Usber接口,
func (c Computer) Working(usb Usber) {
	//通过usb接口变量来调用start和stop方法
	usb.start()
	usb.stop()
}

func main() {
	var c *Computer = &Computer{}
	var u Usber
	u = &Phone{}
	c.Working(u) //相当于 手机调用了start()和stop()  
	u = Camera{}
	c.Working(u) //相当于 照相机调用了start()和stop()  

}

结果: