当前位置 : 主页 > 编程语言 > 其它开发 >

GO语言学习——接口一、接口的定义和实现

来源:互联网 收集:自由互联 发布时间:2022-07-12
接口 接口(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...)
    ...
}

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

接口的实现

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

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

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

动态类型 动态值

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)
}
上一篇:Linux 网络配置
下一篇:没有了
网友评论