第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何在單個函數(shù)中傳遞多類型數(shù)組

如何在單個函數(shù)中傳遞多類型數(shù)組

Go
呼啦一陣風(fēng) 2023-06-12 17:27:25
我有多個結(jié)構(gòu)type Base struct {     Id string     Name string     Code string}type Country struct {     Base     ... }type City struct {     Base     ... }我需要創(chuàng)建一個包含城市或國家/地區(qū)數(shù)組的函數(shù)。目前,我為每種類型都有一個功能,它正在做同樣的事情,我想這不是最好/好的方法!
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經(jīng)驗 獲得超4個贊

看起來您正在嘗試在 Go 中重新創(chuàng)建類繼承。Go 故意沒有類繼承。不要試圖重新創(chuàng)建它。我相信您在想“國家是基地”。那是不正確的。國家嵌入基地。那不是一回事。這對你如何命名事物很重要。在這種情況下,“基地”似乎真的是“位置元數(shù)據(jù)”,所以我們就這樣稱呼它。


type LocationMeta struct {

    id   string

    name string

    code string

}

而且您需要一個適用于各種位置的界面。


type Location interface {

    Id() string

    Name() string

    Code() string

}

我們可以使 LocationMeta 符合 Location,盡管這可能有點奇怪(元數(shù)據(jù)真的是Location 嗎?)。但它有效。


func (b LocationMeta) Id() string {

    return b.id

}


func (b LocationMeta) Name() string {

    return b.name

}


func (b LocationMeta) Code() string {

    return b.code

}

我們可以將 LocationMeta 嵌入城市中:


type City struct {

    LocationMeta

}

而且免費的是,City 現(xiàn)在符合 Location。


也就是說,通常你不會為這么小的沒有邏輯的東西而煩惱這種嵌入。那真是太過分了;我只是在演示它,因為您似乎正在使用它。通常,您只需符合每種類型本身:


type Country struct {

    id   string

    name string

    code string

}


func (c Country) Id() string {

    return c.id

}


func (c Country) Name() string {

    return c.name

}


func (c Country) Code() string {

    return c.code

}

Go 的偉大之處在于它不關(guān)心你如何符合接口。City 和 Country 都以完全不同的方式符合 Location,這完全沒問題。


所以你可以創(chuàng)建一個城市:


boston := City{LocationMeta{id: "bos", name: "Boston", code: "bos"}}

看看這有多奇怪?由于嵌入對象,我們必須創(chuàng)建一個 LocationMeta。有時它是值得的(而且非常強大),但我可能會以鄉(xiāng)村方式(沒有 LocationMeta)完成城市和鄉(xiāng)村:


us := Country{id: "us", name: "USA", code: "us"}

但是,它們都是位置,因此我們可以將它們放在一個切片中:


locations := []Location{boston, us}

并將它們傳遞給事物:


func printLocations(locations []Location) {

    fmt.Println(locations)

}


printLocations(locations)


查看完整回答
反對 回復(fù) 2023-06-12
?
慕蓋茨4494581

TA貢獻1850條經(jīng)驗 獲得超11個贊

我已經(jīng)在評論中發(fā)布了這個,但你可以這樣做


func myfunc(in interface{}) {

    switch in.(type) {

    case []Country:

        // country logic here

    case []City:

        // city logic here

    }

}


查看完整回答
反對 回復(fù) 2023-06-12
  • 2 回答
  • 0 關(guān)注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號