亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在來自不同服務的相似枚舉之間進行轉換

在來自不同服務的相似枚舉之間進行轉換

Go
當年話下 2022-09-12 16:01:15
我正在實現一個通過 gRPC API 公開枚舉的服務。此服務還調用另一個定義相同枚舉的 gRPC API。這兩個枚舉都在不同的包(自動生成的代碼)中定義。如何在Go編程語言中無縫轉換它們?謝謝!
查看完整描述

1 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

假設我們有以下枚舉類型

  • Select

  • Choose

類型轉換 - 游樂場

如果基礎類型 &值相同,則可以使用類型轉換

type Select int32

type Choose int32


const SelectCat Select = 0

const ChooseCat Choose = 0


func main() {

  fmt.Println(Choose(SelectCat) == ChooseCat)

}

映射類型 - 游樂場

在所有情況下,您都可以使用地圖在 2 個枚舉之間進行轉換


type Select int32

type Choose string


const SelectCat Select = 0

const 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


查看完整回答
反對 回復 2022-09-12
  • 1 回答
  • 0 關注
  • 101 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號