登录
首页 >  Golang >  Go问答

在 Go 语言中如何实现类似 Rust 中的模式匹配?

来源:stackoverflow

时间:2024-03-01 18:27:20 129浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《在 Go 语言中如何实现类似 Rust 中的模式匹配?》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

据我所知,go 不支持下面 rust 示例中所示的那种枚举。在 go 中实现相同效果(即对类型进行匹配)的惯用方法是什么?例如,我会使用空结构还是接口?

enum WebEvent {
    PageLoad,
    KeyPress(char),
}

fn inspect(event: WebEvent) {
    match event {
        WebEvent::PageLoad => println!("page loaded"),
        WebEvent::KeyPress(c) => println!("pressed '{}'.", c),
    }
}

示例取自 rust by examples。


解决方案


如果您的 webevent 共享通用功能,请定义一个显式接口。

type webevent interface {
    foo()
    bar()
}

type pageload struct{}

func (*pl pageload) foo() {
    // do something
}

func (*pl pageload) bar() {
    // do something else
}

func inspect(event webevent) {
    switch event.(type) {
    case pageload:
        // inside this block you're operating on event.(pageload), not just event.(webevent)!
    }
}

否则你可以使用空接口

type PageLoad struct{}  // optionally with methods as above

func Inspect(event interface{}) {
    switch event.(type) {
    case PageLoad:
        // similarly, in here event is a PageLoad, not an interface{}
    }
}

今天关于《在 Go 语言中如何实现类似 Rust 中的模式匹配?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>