go语言接口之接口值
在Go语言中,接口值可以存储任何具有实现该接口方法的类型的值。接口值也可以用来存储接口值。这种存储接口值的接口值被称为接口值的接口。
接口值的接口可以用于存储任何接口值,这就允许我们在需要的时候动态地更改存储的类型。
以下是一个简单的例子,演示如何使用接口值的接口来存储不同类型的值:
package main
import (
"fmt"
)
type A struct {
value int
}
func (a A) read() int {
return a.value
}
type B struct {
value string
}
func (b B) read() string {
return b.value
}
func main() {
var r reader = A{5}
fmt.Println(r.read()) // 输出: 5
r = B{"Hello"}
fmt.Println(r.read()) // 输出: Hello
}
type reader interface {
read() any
}
在这个例子中,我们定义了两种类型A和B,它们都实现了reader接口。reader接口的read方法可以返回任何类型,因为any是Go 1.18版本引入的新的空接口类型。
然后我们声明了一个名为r的reader类型的变量。这个变量可以存储任何实现了reader接口的值。我们首先给它赋予了类型A的值,然后更改为类型B的值。每次更改后,我们都调用read方法,程序会输出当前存储的值。
这个例子演示了接口值的接口的一个常见用法,即用于存储任意类型的对象,只要这些对象实现了相同的接口。
评论已关闭