在Go語言中,結構體之間的強制類型轉換需要使用類型斷言。類型斷言的語法如下:
value, ok := expression.(Type)
其中,expression
是要轉換的變量,Type
是目標類型。ok
是一個布爾值,用于判斷轉換是否成功。
下面是一個示例:
type Circle struct {
radius float64
}
type Rectangle struct {
width float64
height float64
}
func main() {
var shape interface{}
// 創建一個Circle類型的變量
shape = Circle{radius: 5.0}
// 將shape強制轉換為Circle類型
if circle, ok := shape.(Circle); ok {
fmt.Printf("Circle radius: %.2f\n", circle.radius)
} else {
fmt.Println("Not a Circle")
}
// 將shape強制轉換為Rectangle類型
if rectangle, ok := shape.(Rectangle); ok {
fmt.Printf("Rectangle width: %.2f, height: %.2f\n", rectangle.width, rectangle.height)
} else {
fmt.Println("Not a Rectangle")
}
}
在上面的示例中,我們先創建了一個空接口變量shape
,然后將其賦值為Circle
類型的變量。接著通過類型斷言將shape
強制轉換為Circle
類型,并打印出radius
字段的值。由于shape
實際上是一個Circle
類型的變量,所以類型斷言成功,打印出了radius
字段的值。然后我們嘗試將shape
強制轉換為Rectangle
類型,由于shape
實際上不是Rectangle
類型的變量,所以類型斷言失敗,打印出了"Not a Rectangle"。