type Shape interfac"> type Shape interfac">
117.info
人生若只如初见

golang interface多态怎么实现

在Go语言中,通过接口可以实现多态。接口是一种抽象类型,它定义了一组方法的签名。任何类型只要实现了接口中定义的方法,就可以被看作是该接口的实现类型。

下面是一个示例,展示了如何在Go语言中实现多态:

package main

import "fmt"

// 定义一个接口
type Shape interface {
    Area() float64
}

// 定义一个结构体,表示矩形
type Rectangle struct {
    Width  float64
    Height float64
}

// 实现接口中的方法
func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

// 定义一个结构体,表示圆形
type Circle struct {
    Radius float64
}

// 实现接口中的方法
func (c Circle) Area() float64 {
    return 3.14 * c.Radius * c.Radius
}

func main() {
    // 创建一个矩形对象
    rectangle := Rectangle{Width: 10, Height: 5}
    // 创建一个圆形对象
    circle := Circle{Radius: 5}

    // 利用接口实现多态
    shapes := []Shape{rectangle, circle}

    // 遍历shapes,调用不同类型的Area方法
    for _, shape := range shapes {
        fmt.Println(shape.Area())
    }
}

在上面的示例中,我们定义了一个Shape接口,并在RectangleCircle结构体中实现了该接口的方法。然后我们创建了一个shapes切片,其中包含了一个矩形和一个圆形对象。接着,利用接口实现了多态,通过遍历shapes切片,调用不同类型的Area方法。

输出结果为:

50
78.5

可以看到,虽然shapes切片中的元素类型不同,但是通过接口实现了多态,可以调用不同类型的方法。

未经允许不得转载 » 本文链接:https://www.117.info/ask/febe7AzsLBQRRAlc.html

推荐文章

  • golang底层是什么语言

    Go语言(也称为Golang)的底层主要是由C语言编写的,并且在后续的版本中,Go语言完成了语言自举,即使用Go语言自身来编写编译器。这使得Go语言的编译器和运行时环...

  • golang协程和线程的区别有哪些

    Golang协程(Goroutine)和线程的区别主要体现在以下几个方面: 轻量级:Golang的协程是由Golang运行时管理的,相较于操作系统级的线程,协程更轻量级,启动和销...

  • golang动态生成struct的方法是什么

    在Go语言中,可以使用reflect包来动态生成struct。下面是一个示例代码:
    package main
    import (
    "fmt"
    "reflect"
    )
    type Person ...

  • golang怎么爬取动态内容

    要爬取动态内容,你可以使用以下几种方法:1. 使用headless浏览器:可以使用一些基于Chrome或Firefox的headless浏览器库,如Puppeteer或Selenium。这些库可以模拟...

  • golang空接口的用途是什么

    Golang的空接口(interface{})可以接受任意类型的值作为参数,因此可以用于以下几种情况: 参数类型不确定:当函数或方法需要接受任意类型的参数时,可以使用空接...

  • golang单例模式的实现方式有哪些

    在Go语言中,单例模式可以通过以下几种方式来实现: 懒汉式:
    懒汉式是指在第一次使用时才创建实例。在Go语言中,可以使用sync.Once来确保实例只被创建一次...

  • linux怎么重启db2数据库

    要重启DB2数据库,可以按照以下步骤操作: 打开终端窗口。 以root用户或具有适当权限的用户身份登录到系统。 使用以下命令停止DB2数据库:
    db2stop 确保数据...

  • golang任务调度的原理是什么

    Golang中的任务调度是通过使用goroutine和channel来实现的。Goroutine是一种轻量级的线程,由Go语言运行时环境管理,可以同时运行多个goroutine。Channel是gorou...