如何深入理解并实现GO语言的接口定义与接口实现?

2026-04-11 08:071阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计716个文字,预计阅读时间需要3分钟。

如何深入理解并实现GO语言的接口定义与接口实现?

接口(interface)是一种特殊类型,它定义了变量有哪些方法,编程中会遇到以下场景:我不关心一个变量是什么类型,我只关心能调用它的哪些方法。package mai

接口

接口(interface)

接口是一种类型,是一种特殊的类型,它规定了变量有哪些方法

在编程中会遇到以下场景:

我不关心一个变量是什么类型,我只关心能调用它的什么方法

package main import "fmt" // 引出接口的实例 // 定义一个能叫的类型 type speaker interface { speak() // 只要实现了speak方法的变量都是speaker类型,方法签名 } type cat struct{} type dog struct{} type person struct{} func (c cat) speak() { fmt.Println("喵喵喵~") } func (d dog) speak() { fmt.Println("汪汪汪~") } func (p person) speak() { fmt.Println("啊啊啊~") } func da(x speaker) { // 接收一个参数传进来什么我就打什么 x.speak() // 挨打了就要叫 } func main() { var c1 cat var d1 dog var p1 person da(c1) da(d1) da(p1) var ss speaker // 定义一个接口类型:speaker 的变量: ss ss = c1 ss = d1 ss = p1 fmt.Println(ss) }

接口示例

package main import "fmt" // 接口示例2 // 不管是什么牌子的车,都能跑 // 定义一个car接口类型 // 不管是什么结构体,只要有run方法都能是car类型 type car interface { run() } type falali struct { brand string } func (f falali) run() { fmt.Printf("%s最漂亮!\n", f.brand) } type baoshijie struct { brand string } func (b baoshijie) run() { fmt.Printf("%s最实用!\n", b.brand) } // drive函数接收一个car类型的变量 func drive(c car) { c.run() } func main() { var f1 = falali{ brand: "法拉利", } var b1 = baoshijie{ brand: "保时捷", } drive(f1) drive(b1) }

接口的定义

type 接口名 interface { 方法名1(参数1,参数2...)(返回值1,返回值2...) 方法名2(参数1,参数2...)(返回值1,返回值2...) ... }

用来给变量\参数\返回值等设置类型

如何深入理解并实现GO语言的接口定义与接口实现?

接口的实现

一个变量如果实现了接口中规定的所有的方法,那么这个变量就实现了这个接口,可以称为这个接口的变量

接口保存的分为两部分:值的类型和值本身

这样就实现了接口变量存储不同的值

动态类型 动态值

package main import "fmt" // 接口的实现 type animal interface { move() eat(string) } type cat struct { name string feet int8 } func (c cat) move() { fmt.Println("走猫步...") } func (c cat) eat(food string) { fmt.Printf("猫吃%s...\n", food) } type chicken struct { feet int8 } func (c chicken) move() { fmt.Println("鸡动了!") } func (c chicken) eat(food string) { fmt.Println("吃%s...\n", food) } func main() { var a1 animal // 定义一个接口类型的变量 fmt.Printf("%T\n", a1) bc := cat{ // 定义一个cat类型的变量bc name: "淘气", feet: 4, } a1 = bc a1.eat("小黄鱼") fmt.Println(a1) kfc := chicken{ feet: 2, } a1 = kfc fmt.Printf("%T\n", a1) // main.chicken a1.eat("虫子") fmt.Println(a1) }

本文共计716个文字,预计阅读时间需要3分钟。

如何深入理解并实现GO语言的接口定义与接口实现?

接口(interface)是一种特殊类型,它定义了变量有哪些方法,编程中会遇到以下场景:我不关心一个变量是什么类型,我只关心能调用它的哪些方法。package mai

接口

接口(interface)

接口是一种类型,是一种特殊的类型,它规定了变量有哪些方法

在编程中会遇到以下场景:

我不关心一个变量是什么类型,我只关心能调用它的什么方法

package main import "fmt" // 引出接口的实例 // 定义一个能叫的类型 type speaker interface { speak() // 只要实现了speak方法的变量都是speaker类型,方法签名 } type cat struct{} type dog struct{} type person struct{} func (c cat) speak() { fmt.Println("喵喵喵~") } func (d dog) speak() { fmt.Println("汪汪汪~") } func (p person) speak() { fmt.Println("啊啊啊~") } func da(x speaker) { // 接收一个参数传进来什么我就打什么 x.speak() // 挨打了就要叫 } func main() { var c1 cat var d1 dog var p1 person da(c1) da(d1) da(p1) var ss speaker // 定义一个接口类型:speaker 的变量: ss ss = c1 ss = d1 ss = p1 fmt.Println(ss) }

接口示例

package main import "fmt" // 接口示例2 // 不管是什么牌子的车,都能跑 // 定义一个car接口类型 // 不管是什么结构体,只要有run方法都能是car类型 type car interface { run() } type falali struct { brand string } func (f falali) run() { fmt.Printf("%s最漂亮!\n", f.brand) } type baoshijie struct { brand string } func (b baoshijie) run() { fmt.Printf("%s最实用!\n", b.brand) } // drive函数接收一个car类型的变量 func drive(c car) { c.run() } func main() { var f1 = falali{ brand: "法拉利", } var b1 = baoshijie{ brand: "保时捷", } drive(f1) drive(b1) }

接口的定义

type 接口名 interface { 方法名1(参数1,参数2...)(返回值1,返回值2...) 方法名2(参数1,参数2...)(返回值1,返回值2...) ... }

用来给变量\参数\返回值等设置类型

如何深入理解并实现GO语言的接口定义与接口实现?

接口的实现

一个变量如果实现了接口中规定的所有的方法,那么这个变量就实现了这个接口,可以称为这个接口的变量

接口保存的分为两部分:值的类型和值本身

这样就实现了接口变量存储不同的值

动态类型 动态值

package main import "fmt" // 接口的实现 type animal interface { move() eat(string) } type cat struct { name string feet int8 } func (c cat) move() { fmt.Println("走猫步...") } func (c cat) eat(food string) { fmt.Printf("猫吃%s...\n", food) } type chicken struct { feet int8 } func (c chicken) move() { fmt.Println("鸡动了!") } func (c chicken) eat(food string) { fmt.Println("吃%s...\n", food) } func main() { var a1 animal // 定义一个接口类型的变量 fmt.Printf("%T\n", a1) bc := cat{ // 定义一个cat类型的变量bc name: "淘气", feet: 4, } a1 = bc a1.eat("小黄鱼") fmt.Println(a1) kfc := chicken{ feet: 2, } a1 = kfc fmt.Printf("%T\n", a1) // main.chicken a1.eat("虫子") fmt.Println(a1) }