사실 이 전에 작성한 코드로 URL Checker 구현이 끝났지만 출력하는 부분이 없었다. 앞서 다른 예제에서 goroutine 으로 실행한 결과를 channel 을 통해 수신하도록 '
지금까지 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(..
앞서 goroutine 과 관련하여 기억해야 할 것을 정리하면 '
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 는 임의의 이..
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 < ..
이번 시간부터 실행활에 적용할 수 있는 예제를 만들어 본다. 우선 임의의 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...