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

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

相关文章

  • Go语言变量与基础数据类型详情

    Go语言变量与基础数据类型详情

    Go 是静态(编译型)语言,是区别于解释型语言的弱类型语言(静态:类型固定,强类型:不同类型不允许直接运算),下面文章将对其进行详细介绍,需要的朋友可以参考一下
    2021-09-09
  • 使用Go goroutine实现并发的Clock服务

    使用Go goroutine实现并发的Clock服务

    这篇文章主要为大家详细介绍了如何使用Go goroutine实现并发的Clock服务,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • Go语言中使用flag包对命令行进行参数解析的方法

    Go语言中使用flag包对命令行进行参数解析的方法

    这篇文章主要介绍了Go语言中使用flag包对命令行进行参数解析的方法,文中举了一个实现flag.Value接口来自定义flag的例子,需要的朋友可以参考下
    2016-04-04
  • Go实现自己的网络流量解析和行为检测引擎原理

    Go实现自己的网络流量解析和行为检测引擎原理

    这篇文章主要为大家介绍了Go实现自己的网络流量解析和行为检测引擎原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Go语言中两个比较流行的缓存库使用示例

    Go语言中两个比较流行的缓存库使用示例

    缓存是计算机科学中的一个重要概念,设想某个组件需要访问外部资源,它向外部源请求资源,接收并使用资源,这些步骤都需要花费时间,下面这篇文章主要给大家介绍了关于Go语言中两个比较流行的缓存库使用的相关资料,需要的朋友可以参考下
    2024-04-04
  • Go语言开发前后端不分离项目详解

    Go语言开发前后端不分离项目详解

    这篇文章主要为大家介绍了Go语言开发前后端不分离项目详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 浅谈一下前端http与https有什么区别

    浅谈一下前端http与https有什么区别

    这篇文章主要介绍了浅谈一下前端http与https有什么区别,现今大部分的网站都已经使用了 https 协议,那么https对比http协议有哪些不同呢,需要的朋友可以参考下
    2023-04-04
  • Go使用Viper库读取YAML配置文件的示例代码

    Go使用Viper库读取YAML配置文件的示例代码

    Viper是适用于Go应用程序的完整配置解决方案,它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式,本文给大家介绍了Go使用Viper库读取YAML配置文件的方法,需要的朋友可以参考下
    2024-05-05
  • 深入探索Go语言中的高效数据结构堆

    深入探索Go语言中的高效数据结构堆

    堆,作为一种基本的数据结构,以其在优先队列和排序算法中提供高效解决方案的能力而闻名。在本文中,我们将深入探讨堆的内部工作原理,包括其特性、实现细节以及在现代编程中的应用
    2008-06-06
  • Golang观察者模式优化订单处理系统实例探究

    Golang观察者模式优化订单处理系统实例探究

    当涉及到订单处理系统时,观察者设计模式可以用于实现订单状态的变化和通知,在这篇文章中,我们将介绍如何使用Golang来实现观察者设计模式,并提供一个基于订单处理系统的代码示例
    2024-01-01

最新评论