在Go中,接口断言是一种将接口类型的值转换为其他具体类型的方法。接口断言可以使用类型断言表达式来进行,其语法为:
value, ok := interfaceValue.(Type)
其中,interfaceValue 是一个接口类型的值,Type 是希望将其转换为的具体类型。
接口断言返回两个值,value 和 ok。如果接口值的动态类型与断言的类型匹配,则value 会是该具体类型的值,而ok 会是 true 。如果断言失败,value 会是该具体类型的零值,而 ok 会是 false 。
下面是一个使用接口断言的示例:
package main
import "fmt"
type Shape interface {
Area() float64
}
type Circle struct {
radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.radius * c.radius
}
func main() {
var s Shape
c := Circle{radius: 5}
s = c
if circle, ok := s.(Circle); ok {
fmt.Println("Circle area:", circle.Area())
} else {
fmt.Println("Not a circle")
}
}
在上述代码中,我们定义了一个 Shape 接口和一个实现了 Shape 接口的 Circle 结构体。在 main 函数中,我们将 Circle 结构体的实例赋值给 Shape 接口类型的变量 s 。然后,我们使用接口断言来判断 s 是否是一个 Circle 类型的值,并调用 Circle 结构体的 Area 方法来计算面积。
如果接口断言成功,我们打印出圆的面积;否则,打印出“Not a circle”。