핸들러 함수로 전달된 컨텍스트를 통해 클라이언트에게  HTTP 응답을 할 수 있습니다.

func (c *gin.Context) {
	// 요청 처리
    
    // 응답 처리
}

응답 하기

http 응답하는 함수 입니다. 핸들러 함수 인자인 c *gin.Context 를 사용 합니다.

// JSON
c.JSON()

// 보기좋은 JSON
c.IndentedJSON()

// JSON 하이제킹 방지 처리
c.SecureJSON()

// JSONP 응답 처리
c.JSONP()

// 특수 html 문자를 유니코드로 대체하지 않음.
c.PureJSON()

// ASCII only JSON
AsciiJSON()

// XML
c.XML()

// String 문자열 응답 Printf 처럼 사용
c.String()

// Redirect 응답
c.Redirect()

// []byte 응답
c.Data()

// Html 템플릿 렌더링 응답
c.HTML()

// YAML 응답
c.YAML()

// ProtoBuf 응답
c.ProtoBuf()

위 함수는 첫번째 인자로 HTTP 응답 코드를 넣어주어야 합니다.

응답 코드

net/http 패키지에 응답 코드가 정의되어 있습니다.

const (
	StatusContinue           = 100 // RFC 7231, 6.2.1
	StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2
	StatusProcessing         = 102 // RFC 2518, 10.1
	StatusEarlyHints         = 103 // RFC 8297

	StatusOK                   = 200 // RFC 7231, 6.3.1
	StatusCreated              = 201 // RFC 7231, 6.3.2
	StatusAccepted             = 202 // RFC 7231, 6.3.3
	StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4
	StatusNoContent            = 204 // RFC 7231, 6.3.5
	StatusResetContent         = 205 // RFC 7231, 6.3.6
    ...
 
//
200 == http.StatusOK

JSON 응답

JSON

기본적인 JSON 응답 입니다.

// Map 사용
c.JSON(http.StatusOK, gin.H{
	"message": "ok",
})

// 구조체 사용
var msg struct {
	Name    string `json:"user"`
	Message string
	Number  int
}

msg.Name = "error"
msg.Name = "bad request"
msg.Number = 0

c.JSON(http.StatusBadRequest, msg)
// in gin package
// H is a shortcut for map[string]interface{}
type H map[string]interface{}

gin.H 를 사용하면 Map을 쉽게 사용할 수 있습니다.

IndentedJSON

JSON 파일을 들여쓰기, 줄 넘김 처리해서 응답합니다. JSON()과 동일하게 사용 합니다.

SecureJSON

JSON 문자열 앞에 while(1); 을 붙여줍니다. JSON 하이제킹을 방지합니다. JSON()과 동일하게 사용 합니다.

JSONP

외부 출처에서 데이터를 받아오는 것의 응답을 처리할 때 사용합니다.

r.GET("/JSONP?callback=x", func(c *gin.Context) {
	data := map[string]interface{}{
		"foo": "bar",
	}
	
	//callback is x
	// Will output  :   x({\"foo\":\"bar\"})
	c.JSONP(http.StatusOK, data)
})

PureJSON

JSON()<\u003c 처럼 특수 HTML 문자를 유니코드로 치완합니다. PureJSON 은 이러한 작업 없이 JSON을 응답 합니다. JSON()과 동일하게 사용 합니다.

AsciiJSON

아스키 문자로만 이루어진 JSON을 응답 합니다.JSON()과 동일하게 사용 합니다.

XML

JSON() 과 같으나, XML 형식으로 응답 합니다. JSON()과 동일하게 사용 합니다.

String

c.String(http.StatusOK, "hello %s", "vompressor")

단순 문자열을 리턴 합니다. Printf처럼 포맷을 사용할 수 있습니다.

Redirect

c.Redirect(http.StatusMovedPermanently, "https://vompressor.com")

리다이렉트 응답입니다. 30X 응답 코드랑 사용 합니다.

Data

c.Data(http.StatusOK, "text/html", []byte("<html></html"))

[]byte 응답 시 사용합니다. 주로 파일 응답에 사용합니다. 두번째 인자로 Content-Type 을 명시해줍니다.

HTML

HTML rendering
Using LoadHTMLGlob() or LoadHTMLFiles()func main() { router := gin.Default() router.LoadHTMLGlob(“templates/*”) //router.LoadHTMLFiles(“templates/template1.html”, “templates/template2.html”) router.GET(”/index”, func(c *gin.Context) { c.HTML(http.StatusOK, “index.tmpl”, gin.H{ “title”: “Main websi…

YAML

JSON() 과 같으나, YAML형식으로 응답 합니다. JSON()과 동일하게 사용 합니다.

ProtoBuf

XML/JSON/YAML/ProtoBuf rendering
func main() { r := gin.Default() // gin.H is a shortcut for map[string]interface{} r.GET(”/someJSON”, func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{“message”: “hey”, “status”: http.StatusOK}) }) r.GET(”/moreJSON”, func(c *gin.Context) { // You also can use a struct var msg struct { Name strin…