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 루프문을 통해 채널을 출력하는게 있겠네요

+ Recent posts