发布时间:2024-12-23 03:20:40
```go package example type A interface { Method() } ```
现在,我们在同一个包下定义了一个私有的结构体,并实现了该接口:```go package example type privateStruct struct{} func (s privateStruct) Method() { fmt.Println("Method") } ```
在另一个包中,我们想要使用该接口,但是我们无法直接访问到实现接口的具体类型。所以,我们需要提供一个公开的方法来获取该类型的实例:```go package another import "example" func GetInstance() example.A { return example.privateStruct{} } ```
通过这种方式,我们可以在其他包中使用接口,并调用接口中的方法。但是,我们无法直接访问到具体类型的私有字段和方法。```go package example type A interface { MethodA() } type B interface { MethodB() } ```
在同一个包下,我们定义了一个结构体,并实现了这两个接口:```go package example type myType struct{} func (t myType) MethodA() { fmt.Println("MethodA") } func (t myType) MethodB() { fmt.Println("MethodB") } ```
现在,在另一个包中,我们可以声明一个类型为这个结构体的变量,并将其赋值给接口类型。通过不同的接口类型,我们可以调用不同的方法:```go package another import "example" func ProcessA(a example.A) { a.MethodA() } func ProcessB(b example.B) { b.MethodB() } func main() { t := example.myType{} ProcessA(t) ProcessB(t) } ```
在这个例子中,我们可以看到,在不同的上下文中,我们使用了同一个类型的变量,并通过接口类型调用了不同的方法。这就展示了接口的多态性。