관리 메뉴

bright jazz music

Go - URL checker (Goroutine + channel) 본문

Language/Go

Go - URL checker (Goroutine + channel)

bright jazz music 2021. 2. 21. 00:55

ㅇㄴ

package main

import (
	"fmt"
	"net/http"
)

type requestResult struct {
	url    string
	status string
}

func main() {
	results := make(map[string]string)
	c := make(chan requestResult) //채널로 requestResult 타입의 스트럭트를 주고 받을 것이다.
	urls := []string{             //urls라는 이름의 string 타입 배열 생성
		"https://airbnb.com",
		"https://amazon.com",
		"https://reddit.com",
		"https://google.com",
		"https://soundcloud.com",
		"https://facebook.com",
		"https://instagram.com",
		"https://academy.nomadcoders.co/",
	}
	for _, url := range urls { 
	go hitURL(url, c) // 고루틴!!
	//순차적으로 url들이 채널과 함께 hitURL 펑션으로 대입됨
	}

	for i := 0; i < len(urls); i++ {
		result := <-c
		results[result.url] = result.status // 맵[키값]=밸류값
	}

	for url, status := range results {
		fmt.Println(url, status)
	}
}

func hitURL(url string, c chan<- requestResult) { //보내기만 가능한 채널
	resp, err := http.Get(url)
	status := "OK"
	if err != nil || resp.StatusCode >= 400 {
		status = "FAILED"
	}
	c <- requestResult{url: url, status: status}

}



===

https://amazon.com OK
https://instagram.com FAILED
https://academy.nomadcoders.co/ OK
https://reddit.com OK
https://soundcloud.com OK
https://google.com OK
https://facebook.com OK
https://airbnb.com OK

'Language > Go' 카테고리의 다른 글

1. Go 웹 프로그래밍  (0) 2021.11.17
Go - channel 2 (for loop 사용)  (0) 2021.02.20
GO - Goroutines 고루틴 기본  (0) 2021.02.19
Go - URL Checker 하나 씩 순차적  (0) 2021.02.19
Go - map 타입에 메소드 추가하기(Update, Delete)  (0) 2021.02.19
Comments