我是靠谱客的博主 英勇枕头,这篇文章主要介绍go 类型转换方式(interface 类型的转换),现在分享给大家,希望可以做个参考。

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

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

原因:

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

复制代码
1
t,ok := i.(T)

例子:

复制代码
1
2
3
4
5
//处理网络消息 func ProcessMsg(m interface{}){ //var a interface{} = m //Msg(m) msg := m.(*Msg)

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

看代码吧~

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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错误

复制代码
1
str, ok := param.(string)

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

也可以这样:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 类型转换方式(interface 类型的转换)的全部内容,更多相关go内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(204)

评论列表共有 0 条评论

立即
投稿
返回
顶部