[英]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 函數分開的方法。 必須在同一個包里。
關於我如何做到這一點的任何指導?
所以我按照@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 需要兩個必須使用的字符串類型參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.