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