gpt4 book ai didi

oop - Golang OOP 说明

转载 作者:IT王子 更新时间:2023-10-29 01:19:16 27 4
gpt4 key购买 nike

我有两个用 go 编写的接口(interface),一个是另一个的子集

type x interface {
a()
}

type y interface {
a()
b()
}

我也有一个包含方法的结构

type z struct {
some string
}

func (s z) a() {
// do stuff
}

func (s z) b() {
// do stuff
}

我有几个问题,即:

  1. 我说 z 同时实现了 x 和 y 对吗?
  2. 一个结构以这种方式实现多个接口(interface)的 OOP 概念是什么?

我试着问了几位同事,他们似乎倾向于将 多态性 作为答案,尽管他们不太确定。 wikipedia entry for polymorphism 说它“是为不同类型的实体提供单一接口(interface)”,但这对我来说就像是直接相反。我还在其他来源(例如 this)中发现 Go “不是真正的 OOP 语言”。

最佳答案

是的,z 实现了 xy。您可以通过使用变量声明将具体类型分配给接口(interface)类型来证明这一点:

var _ x = z{}
var _ y = z{}

这为您提供了编译时检查,以确保类型实现了您希望它实现的接口(interface)。

作为旁注,如果您明确希望 yx + 一些更多的方法,那么这样写是有意义的:

interface y {
x
b()
}

关于命名,如果一个类型实现了两个共享某些方法的不同接口(interface),我会这样调用它——一个实现两个不同接口(interface)的类型。一个接口(interface)是另一个接口(interface)的子集并不重要。

此外,在 Go 中,类型(以及非结构类型)在定义时不与接口(interface)相关联。即使一个类型不是为实现某个接口(interface)而编写的,您也可以通过定义具有不同名称和/或该类型的不同方法组合的新接口(interface),使其实现任意数量的接口(interface)。这使得为​​概念命名变得更加困难 - 当接口(interface)稍后可能在另一个包中定义时,您如何在类型定义时知道名称?

关于oop - Golang OOP 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52088759/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com