设为首页 加入收藏

TOP

Go 快速入门指南 - 判断是否实现接口(一)
2023-07-23 13:32:18 】 浏览:68
Tags:

判断是否实现接口

Go 里面没有 implements 关键字来判断一个结构体 (对象) 是否实现了某个接口, 要实现类似的功能, 需要用到 类型断言

类型断言

// 判断 v 是否实现了接口 i
// 返回值 ok 为 true 表示已实现,ok 为 false 表示未实现
if _, ok := v.(i); ok {
// do something...
} 

例子

判断是否实现接口

package main

import "fmt"

type geometry interface {
    area() float64
    perimeter() float64
}

type rectangle struct {
    width, height float64
}

type circle struct {
    radius float64
}

func (r *rectangle) area() float64 {
    return r.width * r.height
}

func (r *rectangle) perimeter() float64 {
    return (r.width + r.height) * 2
}

func main() {
    var r interface{}

    r = &rectangle{
        width:  10,
        height: 5,
    }
    if v, ok := r.(geometry); ok {
        fmt.Printf("r implements interface geometry, area = %.2f, perimeter = %.2f \n", v.area(), v.perimeter())
    }

    var c interface{}
    c = &circle{
        radius: 10,
    }
    if _, ok := c.(geometry); !ok {
        fmt.Println("c does not implement interface geometry")
    }
}

// $ go run main.go
// 输出如下 
/**
  r implements interface geometry, area = 50.00, perimeter = 30.00
  c does not implement interface geometry
*/

实现系统错误接口

error 数据类型本质上就是一个接口,原型如下:

package builtin

type error interface {
    Error() string
}

例子

实现 error 接口

package main

import (
    "fmt"
)

// 自定义错误结构体
type divideError struct {
    msg string
}

// 实现 error 接口
func (d *divideError) Error() string {
    return d.msg
}

func newDivideError() *divideError {
    return &divideError{
        msg: "divide by zero",
  &nb
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一种安全加密文件的方式,文件可.. 下一篇请求量太大扛不住怎么办?进来学..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目