go语言的接口详解
如下代码
package main
import "fmt"
//接口是一个协议-程序员- 1.写代码 2.解bug 其实就是一组方法的集合
type Programmer interface {
Coding() string //方法只是声明
Debug() string
}
//java里边一种类型只有继承一个接口才行,如果你继承了这个接口,那么这个接口里面全部的方法,你必须实现
type Pythoner struct {
lib []string
kuangjia []string
years []int
}
type Go struct {
}
func (p Pythoner) Coding() string {
fmt.Println("python开发者")
return "python开发者"
}
func (p Pythoner) Debug() string {
fmt.Println("我会python的debug")
return "我会python的debug"
}
func (p Go) Coding() string {
fmt.Println("go开发者")
return "go开发者"
}
func (p Go) Debug() string {
fmt.Println("我会go的debug")
return "我会go的debug"
}
//对于pythoner这个结构体来说,你实现任何方法都可以,但是你只要不全部实现Coding Debug的话,那你pythoner就不是一个Programmer类型
//1.pythoner本身自己就是一个类型,那我何必在意我是不是Programmer
//2.多态的概念
//3.在讲解多态之前,先对interface做一个说明,在go语言中接口是一种类型,是一种抽象类型,int也是一种类型
//开发中经常会遇到的问题
//开发一个电商网站,支付环节,使用微信,支付宝,银行卡,你的系统支持各种类型的支付,每一种支付类型都有统一的接口
//定义一个协议,1.创建订单,2.支付 3.查询支付状态 4.退款
//支付发起了
type AliPay struct {
}
type WeChat struct {
}
type Bank struct {
}
var b Bank
var a AliPay
var w WeChat
//多态 什么类型的时候你申明的类型是一种兼容类型,但是实际赋值的时候是另一种类型
//接口的强制性
//你现在有一个缓存系统 - 这个地方你一开始使用的是缓存redis,但考虑到后期可能使用其他的缓存技术 - 本地memcache
//var x Tongyong
//
//x = Bank{}
//x = Alipay{}
//x = WeChar{}
//
//x.pay
//x.create
//x.query
//这种多态性,其实在python中不需要python中不需要多态,python是动态语言
//go语言不支持继承
//如果后期接入一个新的支付或者取消一个已有的支付
func Handle(p Programmer) {
}
func main() {
//新的语言出来了,接口帮我们完成了go语言的多态
var pro Programmer = Pythoner{}
var pro2 Programmer = Go{}
var pros []Programmer
pros = append(pros, Pythoner{}, Go{})
//接口虽然是一种类型,但是和其他类型不太一样,接口是一种抽象类型,struct是具象
var p = Pythoner{}
fmt.Printf("%T\n", p)
fmt.Printf("%T\n", pro)
fmt.Printf("%T\n", pro2)
//如果大家对于面向对象理解的话,java里面的抽象类型与之很像
}
版权声明:本文为weixin_43907175原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。