前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go的非侵入式接口

go的非侵入式接口

作者头像
李海彬
发布2018-03-26 16:56:32
1.4K0
发布2018-03-26 16:56:32
举报
文章被收录于专栏:Golang语言社区Golang语言社区

什么是接口

接口就是一组方法的集合。比如下面这个例子,几何图形接口就包含了面积与周长两个方法,对于任何实现了这两个方法的type,都属于几何图形。

代码语言:javascript
复制
type Geometry interface {
  Area() float64
  Perim() float64
}

type Rect struct {
  Width, Height float64
}

type Circle struct {
  Radius float64
}

func (r Rect) Area() float64 {
  return r.Width * r.Height
}

func (r Rect) Perim() float64 {
  return 2 * (r.Width + r.Height)
}

func (c Circle) Area() float64 {
  return math.Pi * c.Radius * c.Radius
}

func (c Circle) Perim() float64 {
  return math.Pi * c.Radius * 2
}

什么叫非侵入式接口

首先你需要知道什么叫侵入式接口。以java为例,你需要显式地创建一个类去实现一个接口,这种就是侵入式接口。

代码语言:javascript
复制
public interface Geometry {
  public float Area();
}

public class Rect implements Geometry {
  ...
  @override
  public float Area(){
    ....
  }
}

而golang的例子中,我们并没有在代码的任何地方告诉React或者Circle这两个struct它们需要去实现Geometry接口,而是直接实现了接口中的两个方法。而当它们实现了这两个方法之后,它们就成为了Geometry

代码语言:javascript
复制
func Measure(g Geometry) {
  fmt.Println(g)
  fmt.Println(g.Area())
  fmt.Println(g.Perim())
}

r := Rect{3,5}
c := Circle{4}
Measure(r)
Measure(c)

非侵入式接口的好处

最最重要的好处是,不用为了实现一个接口而导入一个包了。想实现一个接口,直接实现它包含的方法就好了。 另外就是,不用在写类型的时候先想怎么设计接口的问题,直接把需要提供的方法全写了就成。至于哪个方法是哪个接口的,不用太操心。

本文来自:简书

感谢作者:bigtom

查看原文:go的非侵入式接口

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是接口
  • 什么叫非侵入式接口
  • 非侵入式接口的好处
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档