11-Go语言基础-接口(interface)

简介

Go语言中函数和方法的区别:
函数是基本的代码块,用于执行一个任务。 Go 语言最少有个 main() 函数。
方法就是一个包含了接收者的函数。接收者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。

接口:
Go语言的接口是隐式实现的。
interface是方法声明的集合。
任何类型的对象实现了interface接口中声明的全部方法,则算实现了该接口。
interface可以作为一种数据类型,实现了该接口的任意类型的对象都可以给该接口类型的变量赋值。

接口只是一种约束条件,我们不需要显式的调用。某个类型实现了它约束的方法,就说明它已经实现了该接口,他就可以当做该接口使用了。

比如我们实现一套针对某个接口的一组函数,只要实现了该接口约定方法的任意类型,都可以使用这一组函数。而不需要其他类型重新实现这一套函数了。

type 接口名字 interface {
	 方法名1(参数)(返回值)
	 方法名2(参数)(返回值)
	 ...
	 //这里有几个方法,类型必须实现几个同名方法,否则不算实现了该接口
}

简单使用

比如,我们实现一组加减乘除的函数,传入的参数是一个接口;
该接口约束一个方法:获取运算的两个变量;
只要实现了该约束的任意类型,都可以当做该接口传入这一组加减乘除的函数中被运算。

这里结构体element,只要实现了getElement方法,就可以被当做接口Operation被传入加减乘除这四个函数被使用。
这样,我们就可以只实现加减乘除这四个函数,其他类型只要想用这四个函数,只需要实现接口element约束的方法getElement即可。


package main
 
import (
    "fmt"

)
type Operation interface{
    getElement()(a,b int)//返回用于运算的两个变量
}
// 加法
func Addition(opt Operation)int{
    a,b:=opt.getElement()
    return a+b
}
// 减法
func Subtraction(opt Operation)int{
    a,b:=opt.getElement()
    return a-b
}
// 乘法
func Multiplication(opt Operation)int{
    a,b:=opt.getElement()
    return a*b
}
// 除法
func Division(opt Operation)int{
    a,b:=opt.getElement()
    if b!=0{
        return a/b
    }
    return 0
}

type element struct{
    InputA int 
    InputB int 
    Result int
}
func (ele *element)getElement()(int,int){
    return ele.InputA,ele.InputB
}
func main() {
  e:=&element{InputA:2,InputB:3}
  fmt.Println(Addition(e)) //5
  fmt.Println(Subtraction(e))//-1
  fmt.Println(Multiplication(e))//6
  fmt.Println(Division(e))//0
}

在外部包定义接口的时候,记得区分首字母大小写。

发布了264 篇原创文章 · 获赞 23 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Edu_enth/article/details/104001213