Go言語で大量のデータを取得する方法は何ですか?
Golangで大量のデータを取得する方法は以下の通りです。
- ネット/HTTP
- http.Getを使う
- http.Postを使用する
- http.Response を日本語で言い換えると、HTTPレスポンスとなります。
resp, err := http.Get("http://example.com")
if err != nil {
// 处理错误
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
// 处理错误
}
// 处理响应数据
fmt.Println(string(body))
- github.com/PuerkitoBio/goqueryは非常に人気のあるGo言語のパッケージです。
doc, err := goquery.NewDocument("http://example.com")
if err != nil {
// 处理错误
}
doc.Find("a").Each(func(index int, element *goquery.Selection) {
href, _ := element.Attr("href")
fmt.Println(href)
})
- Goの並行性機能を活用して、goroutineやchannelを使用して大量データを並行して取得および処理することができます。複数のリクエストを同時に送信するためにgoroutineを使用し、データを転送するためにchannelを使用することができます。
urls := []string{"http://example.com/page1", "http://example.com/page2", "http://example.com/page3"}
results := make(chan string)
for _, url := range urls {
go func(u string) {
resp, err := http.Get(u)
if err != nil {
// 处理错误
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
// 处理错误
}
// 发送数据到结果通道
results <- string(body)
}(url)
}
// 从结果通道中接收数据
for i := 0; i < len(urls); i++ {
result := <-results
fmt.Println(result)
}
実際の応用では、特定のニーズとデータソースに応じて適切な方法を選択できる、一般的なデータ収集方法がいくつか紹介されました。