在来自不同服务的相似枚举之间进行转换

我正在实现一个通过 gRPC API 公开枚举的服务。此服务还调用另一个定义相同枚举的 gRPC API。

这两个枚举都在不同的包(自动生成的代码)中定义。

如何在Go编程语言中无缝转换它们?

谢谢!


当年话下
浏览 84回答 1
1回答

撒科打诨

假设我们有以下枚举类型SelectChoose类型转换 - 游乐场如果基础类型 &值相同,则可以使用类型转换type Select int32type Choose int32const SelectCat Select = 0const ChooseCat Choose = 0func main() {  fmt.Println(Choose(SelectCat) == ChooseCat)}映射类型 - 游乐场在所有情况下,您都可以使用地图在 2 个枚举之间进行转换type Select int32type Choose stringconst SelectCat Select = 0const ChooseCat Choose = "cat"var selectAToChooseOne = map[SelectA]ChooseOne{  SelectACat: ChooseOneCat,}func SelectToChoose(selected Select) (Choose, bool) {    chosen, ok := selectToChoose[selected]    return chosen, ok}func ChooseToSelect(chosen Choose) (Select, bool) {    for s, c := range selectToChoose {        if c == chosen {            return s, true        }    }    return Select(-1), false}func main() {  chosen, ok := SelectToChoose(SelectCat)  _ = ok // do something with ok  fmt.Println(chosen == ChooseCat)}在这种情况下,从一种到另一种的查找将更快。这是因为直接使用基础映射来查找值。 但是,迭代每个键/值(选择/选择)对以查找正确的匹配项。我已经为这些方法添加了 一个,但这不是必需的SelectChooseSelectToChooseChooseToSelectok
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go