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里面的抽象类型与之很像
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值