티스토리 뷰
반응형
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
// 크롤링할 URL 리스트
urls := []string{
"https://www.example.com",
"https://www.example.com/page1",
"https://www.example.com/page2",
}
// 응답 본문을 받을 채널
respChan := make(chan string)
// URL 리스트를 순회하며 각 URL을 처리하는 고루틴을 생성합니다.
for _, url := range urls {
go func(url string) {
respBody, err := httpGet(url)
if err != nil {
fmt.Printf("Error getting response from %s: %v\n", url, err)
return
}
respChan <- fmt.Sprintf("Response from %s: %s\n", url, respBody)
}(url)
}
// 응답을 받아서 출력합니다.
for range urls {
fmt.Print(<-respChan)
}
}
// HTTP GET 요청을 보내고 응답 본문을 []byte 형태로 반환합니다.
func httpGet(url string) ([]byte, error) {
resp, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return body, nil
}
goroutine
을 사용하여 각 URL을 병렬로 처리respChan
채널을 생성하고, 각goroutine
에서 응답을 보내면 채널 추가- urls 리스트의 크기만큼
goroutine
으로부터 응답을 받아서 출력합니다.
반응형
'공부합시다 > Golang' 카테고리의 다른 글
Redis pub/sub in golang (0) | 2023.05.04 |
---|---|
GVM으로 go설치하기 (0) | 2023.03.30 |
Golang으로 Todo 만들기 (0) | 2022.01.21 |
댓글
공지사항