主页 > 知识库 > go 类型转换方式(interface 类型的转换)

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

热门标签:AI电销 Linux服务器 百度竞价排名 网站排名优化 地方门户网站 服务外包 呼叫中心市场需求 铁路电话系统

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语言第三方库
  • golang gopm get -g -v 无法获取第三方库的解决方案
  • golang 输出重定向:fmt Log,子进程Log,第三方库logrus的详解
  • golang值类型转换成[]uint8类型的操作
  • Mongodb 利用mongoshell进行数据类型转换的实现方法
  • Go语言string,int,int64 ,float之间类型转换方法
  • GO语言类型转换和类型断言实例分析
  • Go 第三方库之类型转换问题

标签:仙桃 崇左 衡水 湘潭 黄山 湖南 兰州 铜川

巨人网络通讯声明:本文标题《go 类型转换方式(interface 类型的转换)》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266