go 类型转换方式(interface 类型的转换)

 更新时间:2021年05月04日 10:11:11   作者:一抹黑黑黑  
这篇文章主要介绍了go 类型转换方式(interface 类型的转换),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

go 在做类型转换时,报错:

cannot convert m (type interface {}) to type Msg: need type assertion

原因:

go 的在 interface 类型转换的时候, 不是使用类型的转换, 而是使用

t,ok := i.(T)

例子:

//处理网络消息
func ProcessMsg(m interface{}){
    //var a interface{} = m
    //Msg(m)
    msg := m.(*Msg)

补充:go []interface{}的类型转换

看代码吧~

package main 
import (
    "fmt"
    "strings"
)
 
func getName(params ...interface{}) string {
    var stringSlice []string
    for _, param := range params {
        stringSlice = append(stringSlice, param.(string))
    }   
    return strings.Join(stringSlice, "_")
}
 
func main() {
    fmt.Println(getName("redis", "slave", "master"))
}

上面的代码如果类型不匹配,会产生panic错误,如果想不产生panic错误

str, ok := param.(string)

如果ok为false,则str为空,不报错。

也可以这样:

package main 
import (
    "fmt"
    "reflect"
    "strings"
)
 
func getName(params ...interface{}) string {
    var stringSlice []string
    for _, param := range params {
        stringSlice = append(stringSlice, param.(string))
    }   
    return strings.Join(stringSlice, "_")
}
 
func main() {
    var aa []interface{} = make([]interface{}, 3)
    aa[0] = "redis" 
    aa[1] = "slave" 
    aa[2] = "master" 
    fmt.Println(reflect.TypeOf(aa))
    fmt.Println(reflect.TypeOf(aa[0]))
    fmt.Println(getName(aa...))
}

输出:

[]interface {}

string

redis_slave_master

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • golang Gorm与数据库完整性约束详解

    golang Gorm与数据库完整性约束详解

    这篇文章主要介绍了golang Gorm与数据库完整性约束详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • golang使用aes库实现加解密操作

    golang使用aes库实现加解密操作

    这篇文章主要介绍了golang使用aes库实现加解密操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • go代码实现买房贷款月供计算的方法

    go代码实现买房贷款月供计算的方法

    今天小编就为大家分享一篇关于go代码实现买房贷款月供计算的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 在golang中使用Sync.WaitGroup解决等待的问题

    在golang中使用Sync.WaitGroup解决等待的问题

    这篇文章主要介绍了在golang中使用Sync.WaitGroup解决等待的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Golang学习笔记(四):array、slice、map

    Golang学习笔记(四):array、slice、map

    这篇文章主要介绍了Golang学习笔记(四):array、slice、map,本文分别讲解了这3个类型的声明&赋值、元素访问、其它操作,需要的朋友可以参考下
    2015-05-05
  • Go语言实现猜数字小游戏

    Go语言实现猜数字小游戏

    这篇文章主要为大家详细介绍了Go语言实现猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • go语言实现将重要数据写入图片中

    go语言实现将重要数据写入图片中

    本文给大家分享的是go语言实现将数据的二进制形式写入图像红色通道数据二进制的低位,从而实现将重要数据隐藏,有需要的小伙伴参考下吧。
    2015-03-03
  • Go实现比较时间大小

    Go实现比较时间大小

    这篇文章主要介绍了Go实现比较时间大小的方法和示例,非常的简单实用,有需要的小伙伴可以参考下。
    2015-04-04
  • golang 生成二维码海报的实现代码

    golang 生成二维码海报的实现代码

    这篇文章主要介绍了golang 生成二维码海报的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • golang http 连接超时和传输超时的例子

    golang http 连接超时和传输超时的例子

    今天小编就为大家分享一篇golang http 连接超时和传输超时的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07

最新评论