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?goroutine實現(xiàn)并發(fā)的Clock服務
這篇文章主要為大家詳細介紹了如何使用Go?goroutine實現(xiàn)并發(fā)的Clock服務,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-06-06Go語言中使用flag包對命令行進行參數(shù)解析的方法
這篇文章主要介紹了Go語言中使用flag包對命令行進行參數(shù)解析的方法,文中舉了一個實現(xiàn)flag.Value接口來自定義flag的例子,需要的朋友可以參考下2016-04-04Golang觀察者模式優(yōu)化訂單處理系統(tǒng)實例探究
當涉及到訂單處理系統(tǒng)時,觀察者設計模式可以用于實現(xiàn)訂單狀態(tài)的變化和通知,在這篇文章中,我們將介紹如何使用Golang來實現(xiàn)觀察者設計模式,并提供一個基于訂單處理系統(tǒng)的代碼示例2024-01-01