概述

Go 接口是隐式实现。 对于一个数据类型,无需申明它实现了哪些接口,只须要实现接口必须的办法即可。
当然了,存在一个小问题就是: 咱们可能无意间实现了某个接口:) ,所以 命名 是如许重要的一件事件。

语法规定

type 接口名称 interface {    办法1名称(参数列表 ...) 返回值列表...    办法2名称(参数列表 ...) 返回值列表...    办法3名称(参数列表 ...) 返回值列表...    ...    ...}

例子

求矩形和圆的周长, 面积

package mainimport (    "fmt"    "math")// 申明一个图形接口type geometry interface {    area() float64    perimeter() float64}// 多个字段类型雷同时,能够并列申明type rectangle struct {    width, height float64}type circle struct {    radius float64}// rectangle 隐式实现了 geometry 接口的 area 办法func (r *rectangle) area() float64 {    return r.width * r.height}// rectangle 隐式实现了 geometry 接口的 perimeter 办法func (r *rectangle) perimeter() float64 {    return (r.width + r.height) * 2}// circle 隐式实现了 geometry 接口的 area 办法func (c *circle) area() float64 {    return math.Pi * c.radius * c.radius}// circle 隐式实现了 geometry 接口的 perimeter 办法func (c *circle) perimeter() float64 {    return 2 * math.Pi * c.radius}func main() {    r := &rectangle{        width:  10,        height: 5,    }    fmt.Printf("Rectangle area = %.2f, perimeter = %.2f \n", r.area(), r.perimeter())    c := &circle{        radius: 10,    }    fmt.Printf("Circle area = %.2f, perimeter = %.2f \n", c.area(), c.perimeter())}// $ go run main.go// 输入如下 /**  Rectangle area = 50.00, perimeter = 30.00  Circle area = 314.16, perimeter = 62.83*/

reference

  1. Go 圣经

分割我