在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”。