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
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
转载请注明原处
本文来自博客园,作者:Carver-大脸猫,转载请注明原文链接:https://www.cnblogs.com/carver/articles/18454812
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现