gpt4 book ai didi

if-statement - 或内部条件

转载 作者:数据小太阳 更新时间:2023-10-29 03:04:52 26 4
gpt4 key购买 nike

我有这个代码:

if ev, ok := evt.(*ATypeEvent); ok {
//process ATypeEvent
} else if ev, ok := evt.(*BTypeEvent); ok {
//process BTypeEvent
} else if ev, ok := evt.(*CTypeEvent); ok {
//process CTypeEvent
}

现在碰巧我还有 3 种事件类型,它们都适合其他 3 种类型中的一种 - 我想我需要一个 OR。

但经过几次尝试,我一直无法弄清楚该怎么做。这不起作用:

if ev, ok := evt.(*ATypeEvent) || evt.(*XTypeEvent); ok {
//process ATypeEvent and X
} else if ev, ok := evt.(*BTypeEvent) || evt.(*YTypeEvent); ok {
//process BTypeEvent and Y
} else if ev, ok := evt.(*CTypeEvent) || evt.(*ZTypeEvent); ok {
//process CTypeEvent and Z
}

也不是

if ev, ok := evt.(*ATypeEvent) || ev, ok := evt.(*XTypeEvent); ok {

也不是

if ev, ok := (evt.(*ATypeEvent) || evt.(*XTypeEvent ) ); ok {

如何正确地做到这一点?

最佳答案

使用 Effective Go 中说明的类型开关,强烈推荐的资源,供您阅读和理解 Go 中的许多内容:

switch v := ev.(type) {
case *ATypeEvent, *XTypeEvent:
// process ATypeEvent and X
case *BTypeEvent, *YTypeEvent:
// process BTypeEvent and Y
case *CTypeEvent, *ZTypeEvent:
// process CTypeEvent and Z
default:
// should never happen
log.Fatalf("error: unexpected type %T", v)
}

至于为什么你的方法不起作用,Go's || and && operators require values of type bool and result in a single value of type bool ,所以分配给 ev, ok 不会如你所愿地工作,也不会使用类型断言作为 bool 值。如果没有类型切换,您将无法执行以下操作:

if ev, ok := evt.(*ATypeEvent); ok {
//process ATypeEvent
} else if ev, ok := evt.(*XTypeEvent); ok {
//process XTypeEvent
} else if ...

关于if-statement - 或内部条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43690146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com