簡體   English   中英

具有相同函數名稱的多個“類”

[英]Multiple "classes" with same function names

我正在嘗試使用 Go 從 myanimelist 和 imdb 中提取一些數據。 根據從中收集數據的站點,搜索預計會有很大不同,因此 myanimelist 和 imdb 需要不同的功能(具有相同的名稱)。 目前,我嘗試將我的函數匯總到一個結構體中,並通過該結構體調用它們。 然而,這並沒有按預期工作。

type myAnimeList interface {
    search(url string, name string) (string, bool)
    getScore(url string, regex string) (string, bool)
    getTop(url string, regex string) (string, bool)
    getEpisodes(url string, regex string) (string, bool)
    getInfo(url string, regex string) (string, bool)
    getAired(url string, regex string) (string, bool)
}

我的計划最終是使用像這樣的字典:

var SitesAvailable = map[string]interface{}{
    "myanimelist":  http.MyAnimeList,
    "myanimelist2": http.MyAnimeList,
}

我是否可以決定我想要激活哪種搜索方法並調用它們。 它可能看起來像:

SitesAvailable["myanimelist"].search(url, seriesName)

我的想法很混亂,並且沒有關於如何做到這一點的清晰結構。 但我想要的是一個字典,我可以在其中決定應該使用哪種搜索方法以及某種將 imdb 函數與 myanimelist 函數分開的方法。 必須在同一個包里。

關於我如何做到這一點的任何指導?

更新 1

所以我按照@syazdani 示例使用了一個通用接口,現在我有了以下內容。 它似乎像我想要的那樣工作並稍微改進了結構。

type Website interface {
    Search() (string, bool)
    GetScore()
    GetTop() (string, bool)
    GetInfo()
    GetAired()
}

type myAnimeList struct {
    score    string
    rank     string
    episodes string
    info     string
    aired    string
    genre    string
    response string
    url      string
}

func (d myAnimeList) GetSeasonal() (string, bool){
//...
}
func (d myAnimeList) GetTop() (string, bool) {
//...
}
/*(repeat with all functions named in the Website interface)*/

var SitesAvailable = map[string]Website{
    "myanimelist":  http.MyAnimeList,
    "myanimelist2": http.MyAnimeList,
}

為了訪問函數調用以下:

SitesAvailable["myanimelist"].Search(url, name)

由於 Search 需要兩個必須使用的字符串類型參數。

您可能應該查看工廠模式來解決這個問題。 您定義了一個接口(就像上面的 myAnimeList 一樣,但可能具有更通用的名稱),但是您還需要提供兩個單獨的實現(一個用於 IMDB,另一個用於 myAnimeList)。 我希望這有幫助!

請參閱此處了解如何在 golang 中實現接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM