Struct 有没有一种方法可以强制转换通过通道发送的结构
在GOLANG中,是否有一种简单的方法可以跨通道为多态行为强制转换结构?我试图通过一个通道发送不同版本的结构,例如,我将有不同类型的事件,比如LoginEvent。每个结构中都有不同数量的数据Struct 有没有一种方法可以强制转换通过通道发送的结构,struct,go,channel,Struct,Go,Channel,在GOLANG中,是否有一种简单的方法可以跨通道为多态行为强制转换结构?我试图通过一个通道发送不同版本的结构,例如,我将有不同类型的事件,比如LoginEvent。每个结构中都有不同数量的数据 package main import "fmt" type Event struct { EvtType EvtType Username string Data string } type LoginEvent struct { Event CallB
package main
import "fmt"
type Event struct {
EvtType EvtType
Username string
Data string
}
type LoginEvent struct {
Event
CallBackChannel chan *Event
}
type EvtType int
const (
Login EvtType = iota+1
Logout
ChatMessage
Presense
BuddyList
)
func main() {
fakeOutputChan := make(chan<- *Event)
ourSrvChannel := make(chan *Event)
lg := (LoginEvent{Event{Login,"",""} ,ourSrvChannel})
fakeOutputChan <- (*Event)(&lg)
fmt.Println("Hello, playground")
}
主程序包
输入“fmt”
类型事件结构{
EvtType EvtType
用户名字符串
数据串
}
类型LoginEvent结构{
事件
CallBackChannel chan*事件
}
类型EvtType int
常数(
登录EvtType=iota+1
注销
聊天信息
在场
联系人列表
)
func main(){
fakeOutputChan:=make(chan惯用的方法是使用接口,然后在接收端执行类型断言。理想情况下,事件
结构应该是一个接口
type Event interface {
// Methods defining data all events share.
}
type UserEvent struct {
Name string
}
// Define methods on *UserEvent to have it qualify as Event interface.
type LoginEvent struct {
...
}
// Define methods on *LoginEvent to have it qualify as Event interface.
ch := make(chan Event)
然后,您可以定义频道以接受任何符合事件
接口条件的内容
type Event interface {
// Methods defining data all events share.
}
type UserEvent struct {
Name string
}
// Define methods on *UserEvent to have it qualify as Event interface.
type LoginEvent struct {
...
}
// Define methods on *LoginEvent to have it qualify as Event interface.
ch := make(chan Event)
接收端将接收事件
对象,并可以执行类型断言以查看是什么
它的基础是混凝土类型:
select {
case evt := <- ch:
if evt == nil {
return
}
switch evt.(type) {
case *LoginEvent:
case *UserEvent:
....
}
}
选择{
案例evt:=