Interpretação de XML/JSON/YAML/ProtoBuf
func main() {
r := gin.Default()
// "gin.H" é um atalho para "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) {
// também podes usar uma estrutura
var msg struct {
Name string `json:"user"`
Message string
Number int
}
msg.Name = "Lena"
msg.Message = "hey"
msg.Number = 123
// nota que "msg.Name" torna-se "user" na JSON
// resultará em: {"user": "Lena", "Message": "hey", "Number": 123}
c.JSON(http.StatusOK, msg)
})
r.GET("/someXML", func(c *gin.Context) {
c.XML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
})
r.GET("/someYAML", func(c *gin.Context) {
c.YAML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
})
r.GET("/someProtoBuf", func(c *gin.Context) {
reps := []int64{int64(1), int64(2)}
label := "test"
// a definição específica do protobuf
// está escrita no ficheiro "testdata/protoexample"
data := &protoexample.Test{
Label: &label,
Reps: reps,
}
// nota que os dados tornam-se dados binários na resposta
// resultará em dados serializados de "protobuf" de "protoexample.Test"
c.ProtoBuf(http.StatusOK, data)
})
// ouvir e servir na 0.0.0.0:8080
r.Run(":8080")
}