go 在做类型转换时,报错:
cannot convert m (type interface {}) to type Msg: need type assertion
原因:
go 的在 interface 类型转换的时候, 不是使用类型的转换, 而是使用
例子:
//处理网络消息
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 第三方库之类型转换问题