티스토리 뷰
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-test
- 둘이상인증한번에사용하기
- l5-swagger-response
- 테스트_다중트랜잭션
- 나는욕심쟁이
- MySQL
- bitwarden-cli
- redis
- django
- php
- Python
- 정규식
- addMonth
- composer-self-update
- POP3
- session+token authorize
- 정의
- graphql-php
- 메일
- aaa패턴
- 자바스크립트
- Laravel
- vim
- l5-swagger
- password-manager
- php-laravel
- addMonthWithoutOverflow
- graphql
- exception-test
- 라라벨
공지사항