关于go:Go-快速入门指南-接口

3次阅读

共计 1075 个字符,预计需要花费 3 分钟才能阅读完成。

概述

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

语法规定

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

例子

求矩形和圆的周长, 面积

package main

import (
    "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 圣经

分割我

正文完
 0