了解冲突的接口

我正在尝试理解界面概念。以下是我的测试代码:


package main


import "fmt"


//interface

type InterfaceA interface {

    A() string

}


//interface

type InterfaceB interface {

    A() string

}


//user defined type structure

type structure struct {

    a string

}


//implementing A(), but which A() ?

func (strt structure) A() string {

    return strt.a

}


func main() {

    fmt.Println("Start")

    variable := structure{"hello"}

    fmt.Println(variable.A())

}


根据文档,我知道没有像其他语言那样明确提及“实现”。但是当我调用variable.A()我的类型structure使用哪个接口时?InterfaceA还是InterfaceB?另外,我真的正确地实现了接口吗?


慕尼黑5688855
浏览 119回答 2
2回答

UYOU

当您调用 时variable.A(),您没有使用任何接口。您正在调用类型的方法structure。您可以使用接口调用相同的方法:variable := structure{"hello"}var ia InterfaceAia=variableia.A() // This calls variable.Avar ib InterfaceBib=variableib.A() // This also calls variable.A

蛊毒传说

您的接口不会相互冲突;接口不冲突。当它们描述相同的事物时,它们可以彼此冗余,但这不会造成冲突或任何其他有形的问题。至于structure使用的是哪个接口:都没有。诸如结构之类的具体类型不使用接口,而是实现它们。接口的实现是隐式和自动的。这只是一个事实陈述,而不是一种机制(除非你明确地使用它)。此外,这两个接口都不会在您的程序中使用。你variable是一个structure并且被用作一个structure。它可以在不同的时间用作其中一个 InterfaceA或InterfaceB两个,但在这个例子中你没有做这样的事情。请参阅 Burak 的回答,了解如何通过接口使用该structure值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go