package main
import (
"errors"
"fmt"
"net/http"
)
var errRequestFailed = errors.New("Request Failed")
type result struct {
url string
status string
}
func main() {
c := make(chan result)
//Slice형 배열
urls := []string{
"https://www.airbnb.com/",
"https://www.google.com/",
"https://www.amazon.com/",
"https://www.reddit.com/",
"https://www.soundcloud.com/",
"https://www.facebook.com/",
"https://www.instagram.com/",
"https://academy.nomadcoders.co/",
}
for _, url := range urls {
go hitURL(url, c)
}
for i := 0; i < len(urls); i++ {
fmt.Println(<-c)
}
}
//chan에 <-을 붙이면 send-only가 된다.
func hitURL(url string, c chan<- result) {
fmt.Println("Checking:", url)
resp, err := http.Get(url)
status := "OK"
if err != nil || resp.StatusCode >= 400 {
status = "FAILED"
}
c <- result{url: url, status: status}
}
여기서 앞서 진행한거와 다르게 따로 설명드릴 만한건 struct를 선언해서 채널 파라미터로 받는것과
for 루프문을 통해 채널을 출력하는게 있겠네요
'GO' 카테고리의 다른 글
노마드와 함께하는 고 Study -6 (페이지에서 데이터 뽑아오기) (0) | 2020.04.02 |
---|---|
노마드와 함께하는 고 Study -5 Goroutine #2 (0) | 2020.03.24 |
노마드와 함께하는 고 Study -5 Goroutine (0) | 2020.03.24 |
노마드와 함께하는 고 Study -4 URL 체커 (0) | 2020.03.23 |
노마드와 함께하는 고 Study -3 메소드 (0) | 2020.03.23 |