728x90
최근에 유튜브 노마드 코더님의 Go언어 무료 강의를 듣기 시작했다.
아주 설렌다.
이 좋은 자료를 무료로 보기 좀 그러니 홍보를..ㅋㅋ (광고 아님)
초라한 개미 블로거가 대형 유튜버를 홍보한다는 게 웃기긴 하네..ㅋㅋ
강의에서 노마드코더님과 같이 만드는 웹스크래퍼의 첫 걸음.
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 |
---|