' [Go] 고루틴 연습 (노마드코더)

Programming/Go

[Go] 고루틴 연습 (노마드코더)

mdisprgm 2021. 9. 18. 14:28
728x90

최근에 유튜브 노마드 코더님의 Go언어 무료 강의를 듣기 시작했다.

 

아주 설렌다.

 

이 좋은 자료를 무료로 보기 좀 그러니 홍보를..ㅋㅋ (광고 아님)

http://nomadcoders.co/

 

초라한 개미 블로거가 대형 유튜버를 홍보한다는 게 웃기긴 하네..ㅋㅋ

 

 

강의에서 노마드코더님과 같이 만드는 웹스크래퍼의 첫 걸음.

URL 체커 소스이다.

package main

import (
	"fmt"
	"net/http"
)

type reqRes struct { //request result
	url    string
	status string
}

func main() {
	results := make(map[string]string) //results as a map
	urls := []string{                  //urls to check
		"https://www.stackoverflow.com",
		"https://www.facebook.com",
		"https://www.reddit.com",
		"https://www.instagram.com",
		"https://www.daum.net",
		"https://www.naver.com",
		"https://www.google.com",
		"https://www.youtube.com",
		"https://academy.nomadcoders.co"}
	channel := make(chan reqRes) //channel to communicate with go hitURl

	for _, url := range urls {
		go hitURL(url, channel) //run with goroutines
	}
	for range urls {
		result := <-channel                           //get result from the channel
		results[result.url] = result.status           //store result
		fmt.Println(result.url, "=>>", result.status) //print result
	}
}

func hitURL(url string, c chan<- reqRes) {
	resp, err := http.Get(url)                //get URL, response and error
	status := "OK"                            //first OK
	if err != nil || resp.StatusCode >= 400 { //if there is an error
		status = "FAILED"                           //status message is FAILED
		fmt.Println("WHY!!:", err, resp.StatusCode) //prints reason for failed
	}
	//	fmt.Println("Checked:", url)
	c <- reqRes{url: url, status: status} //send to the channel
}

 

 


Go 기초 수강 후기 :

안전성을 추구하다보니 사용되지 않는 함수나 변수를 꼭 지워줘야 한다는 게

 

처음 문법을 연습할 땐 많이 불편..^^

 

그리고 if식 조건에는 boolean 밖에 못 들어간다는 게

 

C/C++에 익숙한 난 쬐끔 불편할듯~

int a;
std::cin >> a;
if(a) std::cout << "a is true" << std::endl;
else if(!a) std::cout << "a is not true" << std::endl;
//Go에서는 이거 안 됨ㅜㅜ

 

728x90

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

[Go] vscode에서 디버깅 중 콘솔에 입력받기  (0) 2022.07.05

'