我有以下的功能,我用它來獲得一個URL和數據返回的接口(如結構/ INT /不管):HTTP批次從多個API獲取並保存到結構
var httpClient = &http.Client{Timeout: 10 * time.Second}
func getURLToTarget(url string, target interface{}) error {
req, err := httpClient.Get(url)
if err != nil {
return err
}
defer req.Body.Close()
return json.NewDecoder(req.Body).Decode(target)
}
然後我有幾個函數是這樣的:
func GetCustomerByID(APIKey, cusID string) {
cus := new(Customer)
getURLToTarget(fmt.Sprintf("http://someurl.com/%s/customerbyid/:%s", APIKey, cusID), &cus)
}
在這種情況下,將節省JSON響應爲這樣的結構:
type Customer struct {
Name string
Email string
Address string
}
現在的問題是,如何才能讓所有的http請求同時執行,當我運行:
func main() {
apikey := "some api key"
GetCustomerByID(apikey, "43279843")
GetCustomerDiscounts(apikey, "43279843")
GetProductByID(apikey, "32124")
}
我敢肯定,我需要使用渠道,但我無法弄清楚如何..任何幫助將是非常感謝
那麼,Go有一個很好的關鍵字來同時運行的東西,它被稱爲'go'。我建議通過Tour of Go解決這個問題,這個解決方案要比任何答案都好。 – Volker
假設你參考了tour.golang.org/concurrency,那麼我認爲這是第一個任何人(包括我自己)去..但在我的情況下(以及我讀過的在線文章是不夠的) – fisker
假設你的意思是簡單地在函數調用前添加'go',那麼我99%確定它不會導致批量拖動,所以它仍然會發出X請求(在這種情況下爲3),而不是通過1請求 – fisker