Archive/Go 29

Go 'WEB SERVER WITH ECHO' : Setup Part Two & File Download using ECHO

echo 를 시용해서 서버를 만드는 것을 super easy 하다. main.go 파일을 다음과 같이 수정하자. package main import ( "net/http" "github.com/labstack/echo" ) func main() { e := echo.New() e.GET("/", handleHome) e.Logger.Fatal(e.Start(":1323")) } func handleHome(c echo.Context) error { return c.String(http.StatusOK, "Hello, World!") } 그리고 실행하면 다음과 같이 실행 결과가 출력 되고, 1323 포트를 통해 접속할 수 있다. 정상적으로 실행 되는것을 확인하긴 했지만, myScraper 를 전혀 사용하고..

Archive/Go 2021.05.30

Go 'WEB SERVER WITH ECHO' : Setup Part One, modify to callable scraper & download echo

이번에는 go echo 서버를 만들어 본다. 본격적으로 만들어보기에 앞서 필요한 사전 작업들을 해보자. 우선 main package 에 있던 main function 을 다른 package 로 만들고, 실행이 아닌 호출 가능한 형태로 변경하려 한다. 우선 myScrap 라는 이름의 폴더를 만들고 그 안에 main.go 파일을 옮긴다. 그리고 main.go 파일의 이름을 myScrap.go 로 이름을 변경한다. myScrap.go 가 된 파일을 열고 1. package 이름 변경 2. main function 이름을 myScrap function 으로 변경 3. 전역변수 baseURL 을 myScrap function 내부로 이동 4. myScrap function 에 string 타입의 변수 term 을..

Archive/Go 2021.05.30

Go 'URL CHECKER & GO ROUTINES' : URL Checker + Go Routines

지금까지 goroutine 에 대해 알아보았으니 'main.go' 파일에 작성했던 URL Checker 를 goroutine 을 사용해서 개선해보자. package main import ( "errors" "fmt" "net/http" ) // channel 을 통해 주고 받을 데이터 타입으로 사용 할 struct 선언 type result struct { url string status string } // 사용자 정의 error var errRequestFailed = errors.New("Request failed") func main() { // url 접속 결과를 담을 비어있는 map 선언 results := make(map[string]string) // channel 생성 c := make(..

Archive/Go 2021.05.23

Go 'URL CHECKER & GO ROUTINES' : Channels Recap, channel response receive using loop (blocking)

이번에는 Channel 로 주고 받는 데이터를 bool 타입이 아닌 string 타입을 사용해보자. 아래는 수정한 main_goroutine.go 파일이다. package main import ( "fmt" "time" ) func main() { // 길이 2 의 문자열 배열 생성 people := [5]string{"nico", "nimkoes", "go", "java", "spring"} // bool 타입을 주고받을 수 있는 channel 생성, c 는 임의의 이름으로 사용 가능 c := make(chan string) // 반복문을 실행 하면서 두 개의 goroutine 을 실행 for _, person := range people { // channel 을 같이 전달 go isSexy(pers..

Archive/Go 2021.05.23

Go 'URL CHECKER & GO ROUTINES' : Channels

Channel 은 goroutine 과 main function 사이 또는 goroutine 간 정보 전달을 하기 위한 방법 이다. 앞서 make 가 map 을 만들기 위한 function 이라고 정리 했었는데, make function 은 slice, map 그리고 channel 을 만들 수 있는 function 이 맞는것 같다. 아무튼, 이번에는 channel 이라는 것을 사용해보려 한다. 코드에 대한 설명은 주석에 작성 하였다. package main import ( "fmt" "time" ) func main() { // 길이 2 의 문자열 배열 생성 people := [2]string{"nico", "nimkoes"} // bool 타입을 주고받을 수 있는 channel 생성, c 는 임의의 이..

Archive/Go 2021.05.23

Go 'URL CHECKER & GO ROUTINES' : Goroutines

Go 에는 멀티스레드를 생성해서 실행하는게 정말 간단한 것 같다. 예를 들어 Java 같은 경우 Runnable 인터페이스를 구현 한다던가 하는 작업이 필요하고, 그렇게 하려다보면 장황한 코드가 작성 되기도 한다. 물론 람다식을 쓰면 좀 나아지겠지만 말이다. 다른 실행 프로그램과 구분하기 위해 main_goroutine.go 파일을 새롭게 작성 했다. 그리고 1초 간격으로 문자열을 출력하는 반복문을 가진 sexyCount 라는 function 을 작성했다. package main import ( "fmt" "time" ) func main() { sexyCount("nico") sexyCount("nimkoes") } func sexyCount(person string) { for i := 0; i < ..

Archive/Go 2021.05.23

Go 'URL CHECKER & GO ROUTINES' : Slow URLChecker, empty map 선언

이번에는 지난번에 작성했던 URL 접속 코드를 조금 개선했다. 개선된 것은 url 에 GET 요청을 보냈을 때 응답 결과를 확인할 수 있도록 map 을 사용하도록 한 부분이다. 정의한 results 이름의 map 은 key, value 타입을 모두 string 으로 사용한다. map 을 정의할 때 주의할게 있는데, 마치 java 에서 선언만 하고 초기화 시켜주지 않으면 오류가 발생했던 것처럼 Go 에서도 empty 로 초기화 해주는 부분이 있어야 오류가 발생하지 않았다. // url 접속 결과를 담을 비어있는 map 선언 // 방법 1 results := map[string]string{} // 방법 2 var results = map[string]string{} // 방법 3 :: make 는 map ..

Archive/Go 2021.05.22

Go 'URL CHECKER & GO ROUTINES' : hitURL, HTTP GET REQUEST

이번 시간부터 실행활에 적용할 수 있는 예제를 만들어 본다. 우선 임의의 URL 에 접속하는 예제를 만든다. part3 에 대한 폴더를 만들고 그 안에 main.go 를 다음과 같이 작성한다. package main import ( "errors" "fmt" "net/http" ) // 사용자 정의 error var errRequestFailed = errors.New("Request failed") func main() { // 접속을 시도 할 url 목록 urls := []string{ "https://www.airbnb.com/", "https://www.google.com/", "https://www.amazon.com/", "https://www.reddit.com/", "https://www...

Archive/Go 2021.05.22