티스토리 뷰
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
- addMonthWithoutOverflow
- l5-swagger
- 자바스크립트
- password-manager
- laravel-test
- l5-swagger-response
- Python
- laravel-kafka
- vim
- graphql
- eloquent-observer
- django
- bitwarden-cli
- 테스트_다중트랜잭션
- POP3
- addMonth
- MySQL
- aaa패턴
- exception-test
- 라라벨
- 정의
- Laravel
- session+token authorize
- observer 매개변수 전달하기
- php
- php-laravel
- redis
- graphql-php
- 메일
- 정규식
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함