go 在做類型轉(zhuǎn)換時,報錯:
cannot convert m (type interface {}) to type Msg: need type assertion
原因:
go 的在 interface 類型轉(zhuǎn)換的時候, 不是使用類型的轉(zhuǎn)換, 而是使用
例子:
//處理網(wǎng)絡(luò)消息
func ProcessMsg(m interface{}){
//var a interface{} = m
//Msg(m)
msg := m.(*Msg)
補充:go []interface{}的類型轉(zhuǎn)換
看代碼吧~
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"))
}
上面的代碼如果類型不匹配,會產(chǎn)生panic錯誤,如果想不產(chǎn)生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
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- 手把手教你導(dǎo)入Go語言第三方庫
- golang gopm get -g -v 無法獲取第三方庫的解決方案
- golang 輸出重定向:fmt Log,子進程Log,第三方庫logrus的詳解
- golang值類型轉(zhuǎn)換成[]uint8類型的操作
- Mongodb 利用mongoshell進行數(shù)據(jù)類型轉(zhuǎn)換的實現(xiàn)方法
- Go語言string,int,int64 ,float之間類型轉(zhuǎn)換方法
- GO語言類型轉(zhuǎn)換和類型斷言實例分析
- Go 第三方庫之類型轉(zhuǎn)換問題