E0a5328a6024524a9f32b9f24c053e3e
go特性:接口interface(Duck typing|非侵入式)

GO有类似java/php那样的接口吗,有啊,在go中,对于任何数据类型,只要它的方法集合中完全包含了一个接口的全部的方法,那么他就是这个接口的实现类型。

type ServiceInter interface {
    Get(id int) string
}

只要一个数据类型的方法集合中有ServiceInter接口的Get方法,那么它就一定是接口的实现类型。这是一种无侵入式的接口实现方式。这种方式还有一个专有名词,叫“Duck typing”,中文常译作“鸭子类型”。

'"当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。"

在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。

1、定义interface

src/project/com.struct/services/ServiceInter.go

type ServiceInter interface {
    Get(id int) string
}

2、定义实现类
src/project/com.struct/services/ProductService.go

package services
type ProductService struct  {
}
func (ps *ProductService) Get(id int) string {
    return "单个产品内容"
}

这样我们这个ProductService的struct 实现了interface方法。
3、src/project/com.struct/appmain/main.go

package main
import (
    "fmt"
    "project/com.struct/services"
)
func main() {
    var service services.ServiceInter = services.ProductService{}
    fmt.Println(service.Get(1))
}

因为ProductService实现了ServiceInter接口的方法,所以他们是可以赋值相等的,是不是感觉很神奇

工厂模式体现接口

top Created with Sketch.