Golang 类型断言
由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言,具体如下:
var t float32 = 2.4
var x interface{}
x = t
y = x.(float32) // 成功转成 float32
具体案例1:
package main
import "fmt"
type Phone struct{
}
type Mp3 struct{
}
type Computer struct{
}
type Usb interface{
Start()
Stop()
}
func(p Phone)Start(){
fmt.Println("Phone 开始工作了")
}
func(p Phone)Stop(){
fmt.Println("Phone 停止工作了")
}
func(p Phone)Call(){
fmt.Println("Phone 在打电话...")
}
func(m Mp3)Start(){
fmt.Println("Mp3 开始工作了")
}
func(p Mp3)Stop(){
fmt.Println("Mp3 停止工作了")
}
func(composer Composer)Working(usb Usb){
usb.Start()
//如果usb是指向Phone结构体变量,就调用Call方法 【类型断言】
if phone,ok := usb.(Phone);ok{
phone.Call()
}
usb.Stop()
}
func main(){
var usbArr [2]Usb
usbArr[0] = Phone{"华为"}
usbArr[1] = Mp3{"听歌专属"}
var computer Computer
for _,v range usbArr{
computer.Working(v)
}
}
具体案例2:
package main
type Test struct{
}
func getType(items... interface{}){
for index,x:= range items{
switch x.(type){
case bool:
fmt.Println("第 %v 个参数是 bool,值为 %v\n",index,x)
case float32:
fmt.Println("第 %v 个参数是 float32,值为 %v\n",index,x)
case float64:
fmt.Println("第 %v 个参数是 float64,值为 %v\n",index,x)
case Test:
fmt.Println("第 %v 个参数是 Test,值为 %v\n",index,x)
case *Test:
fmt.Println("第 %v 个参数是 *Test,值为 %v\n",index,x)
default:
fmt.Println("第 %v 个参数 【类型不确定】,值为 %v\n",index,x)
}
}
}
func main(){
var n1 float32 = 1.2
var n2 float64 = 3.5
var n3 int32 = 45
var n4 string = "carver"
getType(n1,n2,n3,n4)
}
本文来自博客园,作者:Carver大脸猫,转载请注明原文链接:https://www.cnblogs.com/carver/articles/18454812

浙公网安备 33010602011771号