定义与使用接口

5年以前  |  阅读数:327 次  |  编程语言:Golang 

定义与使用接口

go语言包含但不限于int32,float32,chan,map,slice等内建类型,同时为了能让用户定义自己的类型,go语言为我们提供了struct和interface这两种好用的工具。

以下示例用来说明如何使用interface,struct

package main

import (
    "fmt"
    "math"
)

type tmp interface {
    area() float32
}

type geometry interface {
    // area() float32
    tmp
    perim() float32
}

type rect struct {
    len, width float32
}

func (r *rect) area() float32 {
    return r.len * r.width
}

func (r *rect) perim() float32 {
    return 2 * (r.len + r.width)
}

type circle struct {
    radius float32
}

func (c *circle) area() float32 {
    return math.Pi * c.radius * c.radius
}

func (c *circle) perim() float32 {
    return 2 * math.Pi * c.radius
}

func show(name string, params interface{}) {
    switch params.(type) {
    case geometry:
        fmt.Printf("area of %v is %v \n", name, params.(geometry).area())
        fmt.Printf("perim of %v is %v \n", name, params.(geometry).perim())
    default:
        fmt.Println("Wrong type!!")
    }
}

func main() {
    r := &rect{
        len:   1,
        width: 2,
    }
    show("rect", r)

    cir := &circle{
        radius: 1,
    }
    show("circle", cir)
}
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例