go语言结构体接口(go结构体里嵌套接口)

什么是go语言结构体接口

在go语言中,结构体(struct)是一种自定义的数据类型,可以将不同的数据类型聚合在一起,形成一个新的数据类型。而接口(interface)则是一种描述对象行为的类型,它定义了对象应该具有的方法,但没有实现这些方法的代码。结构体接口则是在结构体中实现接口的功能。

结构体与接口的定义和实现

结构体的定义格式为:type 结构体名 struct { 成员变量名 类型1,成员变量2 类型2……}。例如,定义一个Rectangle(矩形)结构体:

type Rectangle struct {
    width  float64
    height float64
}

接口的定义格式为:type 接口名 interface { 方法名1(参数1 参数类型1) 返回值类型1 方法名2(参数2 参数类型2) 返回值类型2 ……}。例如,定义一个Shape(形状)接口:

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

在结构体中实现接口的功能,需要定义结构体的方法,方法的格式为:func (s 结构体名) 方法名() 返回值类型 { 方法实现 }。例如,在Rectangle结构体中实现Shape接口所定义的area()和perimeter()方法:

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

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

结构体接口的应用

结构体接口在实际应用中可以发挥很大的作用,例如,可以定义一个统一的图形类型,然后定义不同的形状的结构体,并实现图形接口,以实现对不同形状图形的统一操作。示例代码如下:

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

type Rectangle struct {
    width  float64
    height float64
}

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

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

type Circle struct {
    radius float64
}

func (c Circle) area() float64 {
    return math.Pi * c.radius * c.radius
}

func (c Circle) perimeter() float64 {
    return 2 * math.Pi * c.radius
}

func printShape(s Shape) {
    fmt.Printf("Area: %f\nPerimeter %f\n", s.area(), s.perimeter())
}

func main() {
    r := Rectangle{width: 3, height: 4}
    c := Circle{radius: 5}
    printShape(r)
    printShape(c)
}

以上代码实现了两个不同形状的图形的统一操作,并打印出其面积和周长。

结论

go语言的结构体和接口是其面向对象特性的重要组成部分,结构体可以用来定义自定义的数据类型,并实现接口的方法,实现不同类型的统一操作。接口则可以用来描述对象应该具有的方法,这些方法在装饰器模式等设计模式中具有重要作用。

本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/golang-om-2.html

郑重声明:

本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

我们不承担任何技术及版权问题,且不对任何资源负法律责任。

如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。

如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(0)
上一篇 2023年5月2日 上午3:13
下一篇 2023年5月2日 上午3:13

猜你喜欢