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

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

是否有更慣用的方法來根據輸入創建特定類型的變量?

是否有更慣用的方法來根據輸入創建特定類型的變量?

Go
慕哥6287543 2023-06-01 16:27:55
在這個游樂場鏈接中,我創建了我的代碼的一個人為版本,我在其中創建了一個基于輸入字符串的 X 類型的變量。該變量將是少數類型之一并實現一個接口。該代碼當前編譯并提供了正確的結果,但是它給我留下了相當冗長的印象,我正在嘗試尋找是否有一種速記方法來實現我正在實現的結果。該示例有 3 種實現接口(動物)的類型(狗、貓和鳥),但是我的實際代碼在此 switch 語句中將有多達 40 種類型。我使用這段代碼的原因是當從 DBMS 中檢索結果時,我試圖使用一種通用的加載方法,當與sqlx結合使用時,它會根據輸入字符串將數據庫表加載到正確的結構中。我可以完全控制應用程序,并且可以根據需要將輸入字符串更改為另一種類型。來自游樂場鏈接的代碼:package mainimport (    "fmt")type animal interface {    call() string}type dog struct {}func (d *dog) call() string {    return "Woof!"}type cat struct {}func (c *cat) call() string {    return "Meow!"}type bird struct {}func (c *bird) call() string {    return "Chirp!"}func main() {    var animal animal    animalType := "dog"    switch animalType{    case "dog":        animal = new(dog)    case "cat":        animal = new(cat)    case "bird":        animal = new(bird)
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

您可以創建一個從“字符串”到“返回動物的函數”的哈希圖,但設置它會比 switch 語句更冗長。


像這樣的(未測試)


type AnimalCtor func() animal


var animalMap map[string]AnimalCtor


.....


func init() {

    animalMap["dog"] = func() animal { return &dog{} }

    animalMap["cat"] = func() animal { return &cat{} }

    animalMap["bird"] = func() animal { return &bird{} }

    .....

}


func createAnimalFromString(input string) animal {

    ctor, ok := animalMap[input]

    if ok {

        return ctor()

    } else {

        return nil

    }

}

但它比 switch 語句冗長得多,并且模糊了原本應該明確和清楚的內容。


查看完整回答
反對 回復 2023-06-01
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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