티스토리 뷰
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 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- laravel-kafka
- aaa패턴
- 컨테이너내에서 메일 발송하기
- msmtp
- l5-swagger-response
- l5-swagger
- redis
- eloquent-observer
- vitepress-plugin-mermaid
- vitepress
- addMonth
- 메일
- php
- 자바스크립트
- MySQL
- bitwarden-cli
- graphql-php
- exception-test
- addMonthWithoutOverflow
- graphql
- django
- Laravel
- password-manager
- POP3
- 정규식
- observer 매개변수 전달하기
- vim
- Python
- 라라벨
- 정의
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함