golang 打印类型和switch case选择
因为需要打印传输信息,要用到pion的stats,而stats返回报告的又包含多个type,对于不同type有不同的数据统计,所以需要打印类型和switch case针对于不同的type执行不同的命令。
针对于返回变量类型,golang采用reflect包,对于变量valua,可以利用reflect.TypeOf(valua)
返回变量类型,而这只能做一些简单的操作。并不能很有效的解决我们上述问题。
出现上述问题的原因是golang在interface接口支持不同的type,比如dog 和cat两个type都可能共有一个speak接口,但是我们调用的时候可能会不知道实际上是哪个类型,容易出现断言恐慌,这里借用qwen的示例代码
type Animal interface {
Speak()
}
type Dog struct{}
func (d Dog) Speak() {
fmt.Println("Woof!")
}
type Cat struct{}
func (c Cat) Speak() {
fmt.Println("Meow!")
}
var animal Animal = Dog{} // 或者 Cat{}
dog := animal.(Dog) // 类型断言
dog.Speak() // 调用 Dog 的 Speak 方法
可以看到,如果我们animal实际上是Cat{},然后下面又用了animal.(Dog),就会panic,所以更安全的方法是针对于不同type的同一个接口,我们对每个type都编写他们自己的执行指令,比如改成下面的代码
switch t:=animal.(type){
case Dog:
dog := animal.(Dog) // 类型断言
dog.Speak() // 调用 Dog 的 Speak 方法
case Cat:
cat := animal.(Cat) // 类型断言
cat.Speak() // 调用 Cat 的 Speak 方法
}
针对于这种只有两个类型的变量,还可以直接利用 if dog, ok := animal.(Dog); ok{}else{}
.
当然如果不想用switch的话就只能ifelse了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix