본문 바로가기
Golang

Golang http package

by 시바도지 2023. 8. 8.
반응형

http 패키지는 golang에서 HTTP 클라이언트 및 서버를 작성하기 위해 제공되는 표준 패키지다.
이 패키지는 HTTP 요청을 보내고 응답을 받는 클라이언트와, HTTP 요청을 처리하고 응답을 보내는 
서버를 구현할 수 있는 기능을 제공한다.


http 패키지를 사용하여 간단한 HTTP 클라이언트나 서버를 구현할 수 있으며, 
이를 통해 웹 애플리케이션을 만들 수 있다.

 



그렇다면 http 패키지의 주요 기능을 살펴보자.

 


HTTP 클라이언트(Client): 

http 패키지는 HTTP 클라이언트를 생성하고, GET, POST, PUT, DELETE 등의 HTTP 요청을 생성하고 보낼 수 있다.

또한, 클라이언트는 응답을 받아서 처리할 수 있다.

클라이언트는 네트워크 요청과 응답을 처리하는데 유용한 기능들을 제공한다.

HTTP 서버(Server): 

http 패키지는 HTTP 서버를 구현하는데 필요한 기능들을 제공한다.

서버는 들어오는 HTTP 요청을 처리하고, 요청에 따라 적절한 응답을 생성하여 클라이언트에게 보낸다.

서버는 라우팅, 핸들러 등을 사용하여 요청을 처리하고 응답을 보낼 수 있다.

HTTP 핸들러(Handler): 

http 패키지에서는 핸들러를 등록하여 요청을 처리한다.

핸들러는 특정 URL 패턴에 따라 요청을 처리하고, 적절한 응답을 생성하여 보낼 수 있다.

 

그외에도 HTTP헤더, 쿠키, 캐싱, 리다이렉트 등과 같은 기능들도 제공한다.

 

 

 

예제 코드


 

GET 요청

package main

import (
	"fmt"
	"net/http"
)

func main() {
	resp, err := http.Get("여기에 요청할 주소를 입력하세요.")
	if err != nil {
		fmt.Println("GET request failed:", err)
		return
	}
	defer resp.Body.Close()

	fmt.Println("GET Response Status:", resp.Status)

	// Response body를 읽어옴
	// 원래는 io.ReadCloser 타입으로 읽어오지만 간단한 예제를 위해 생략
}

 

POST 요청

package main

import (
	"bytes"
	"fmt"
	"net/http"
)

func main() {
	url := "여기에 요청할 주소를 입력하세요."
	payload := []byte(`{"title": "ujs", "body": "How could person name be uhm jun sik", "userId": 1}`)

	resp, err := http.Post(url, "application/json", bytes.NewBuffer(payload))
	if err != nil {
		fmt.Println("POST request failed:", err)
		return
	}
	defer resp.Body.Close()

	fmt.Println("POST Response Status:", resp.Status)

	// Response body를 읽어옴
	// 원래는 io.ReadCloser 타입으로 읽어오지만 간단한 예제를 위해 생략
}

 

PUT

package main

import (
	"bytes"
	"fmt"
	"net/http"
)

func main() {
	url := "여기에 요청할 주소를 입력하세요."
	payload := []byte(`{"title": "uhm", "body": "js", "userId": 1}`)

	req, err := http.NewRequest("PUT", url, bytes.NewBuffer(payload))
	if err != nil {
		fmt.Println("PUT request creation failed:", err)
		return
	}

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("PUT request failed:", err)
		return
	}
	defer resp.Body.Close()

	fmt.Println("PUT Response Status:", resp.Status)

	// Response body를 읽어옴
	// 원래는 io.ReadCloser 타입으로 읽어오지만 간단한 예제를 위해 생략
}

 

DELETE

package main

import (
	"fmt"
	"net/http"
)

func main() {
	url := "여기에 요청할 주소를 입력하세요."

	req, err := http.NewRequest("DELETE", url, nil)
	if err != nil {
		fmt.Println("DELETE request creation failed:", err)
		return
	}

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("DELETE request failed:", err)
		return
	}
	defer resp.Body.Close()

	fmt.Println("DELETE Response Status:", resp.Status)

	// Response body를 읽어옴
	// 원래는 io.ReadCloser 타입으로 읽어오지만 간단한 예제를 위해 생략
}

 

반응형

댓글