본문 바로가기

Programming Language/golang

Golang backend programming - Http get 호출 + timeout 처리

약간 멍청하게 생긴 golang 마스코트


Golang의 백엔드 프로그래밍을 하기 위해 아래 조건을 갖춘 프로그램을 개발하기로 했다.


코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package main
 
import (
    "fmt"
    "time"
    "net/http"
    "io/ioutil"
)
 
func main(){
    for {
        fmt.Println("Http request start")
 
        c1 := make(chan string, 1// get response를 가져오기 위한 channel 생성
        go func() {
            resp, err := http.Get("https://github.com/"// github사이트 get호출
            if err != nil {
                panic(err)
            }
 
            defer resp.Body.Close()
 
            data, err := ioutil.ReadAll(resp.Body)
            if err != nil {
                panic(err) // 에러 경우 panic 발생
            }
            c1 <- string(data) // 정상적으로 get호출 되었을 경우 channel에 body값 넣기
        }()
 
        select {
            case result := <-c1:
                fmt.Println(result)
            case <-time.After(1 * time.Second): // 1초 timeout 설정, 1초 이내에 get호출 못하면 timeout 발생
                fmt.Println("HTTP request timeout")
        }
 
        time.Sleep(5000 * time.Millisecond) // 5초마다 for구문이 돌도록 delay
    }
}
cs



결과물

- 네트워크 상태에 따라 timeout / 혹은 성공하는 모습을 볼 수 있다.

- 첫번째 시도는 timeout, 두번째 시도에서 200 OK로 받아오는 모습을 볼 수 있다.




End of Document