Created
November 20, 2022 16:35
-
-
Save frmichetti/011a03bcd0fcf97563ba0a938aeb86ea to your computer and use it in GitHub Desktop.
Go lang Rest Api with Gin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"net/http" | |
"github.com/gin-gonic/gin" | |
) | |
// album represents data about a record album. | |
type album struct { | |
ID string `json:"id"` | |
Title string `json:"title"` | |
Artist string `json:"artist"` | |
Price float64 `json:"price"` | |
} | |
// albums slice to seed record album data. | |
var albums = []album{ | |
{ID: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99}, | |
{ID: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99}, | |
{ID: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99}, | |
} | |
func main() { | |
router := gin.Default() | |
router.GET("/albums", getAlbums) | |
router.GET("/albums/:id", getAlbumByID) | |
router.POST("/albums", postAlbums) | |
router.Run("localhost:8080") | |
} | |
// getAlbums responds with the list of all albums as JSON. | |
func getAlbums(c *gin.Context) { | |
c.IndentedJSON(http.StatusOK, albums) | |
} | |
// postAlbums adds an album from JSON received in the request body. | |
func postAlbums(c *gin.Context) { | |
var newAlbum album | |
// Call BindJSON to bind the received JSON to | |
// newAlbum. | |
if err := c.BindJSON(&newAlbum); err != nil { | |
return | |
} | |
// Add the new album to the slice. | |
albums = append(albums, newAlbum) | |
c.IndentedJSON(http.StatusCreated, newAlbum) | |
} | |
// getAlbumByID locates the album whose ID value matches the id | |
// parameter sent by the client, then returns that album as a response. | |
func getAlbumByID(c *gin.Context) { | |
id := c.Param("id") | |
// Loop through the list of albums, looking for | |
// an album whose ID value matches the parameter. | |
for _, a := range albums { | |
if a.ID == id { | |
c.IndentedJSON(http.StatusOK, a) | |
return | |
} | |
} | |
c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"}) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment