package main import ( "fmt" "strconv" ) type episode struct { Index int64 `json:"index"` Cid int64 `json:"cid"` Title string `json:"title"` } func main() { episodeProvider := new(mockProvider) // epdatas, err := getEPData(episodeProvider, "av1742161") epdatas, err := getEPData(episodeProvider, "ep173262") if err != nil { panic(err) } for i, epdata := range epdatas { fmt.Printf("ep %d Cid: %v, Title: %s\n", i, epdata.Cid, epdata.Title) } } func getEPData(provider EpisodeDataProvider, videoNo string) (episodes []episode, err error) { videoType := videoNo[0:2] videoID, err := strconv.ParseInt(videoNo[2:], 10, 64) if err != nil { return } fmt.Println(videoType, videoID) switch videoType { case "av": avdatas, err := provider.GetAVData(videoID) if err != nil { return episodes, err } for i, avdata := range avdatas { episodes = append(episodes, episode{ Index: int64(i), Cid: avdata.Cid, Title: avdata.Part, }) } case "ep": epdatas, err := provider.GetEPData(videoID) if err != nil { return episodes, err } for i, epdata := range epdatas { episodes = append(episodes, episode{ Index: int64(i), Cid: epdata.Cid, Title: epdata.LongTitle, }) } } return }