Created
December 15, 2022 03:10
-
-
Save smijar/5482094451047e8aba7baf333a5961bc to your computer and use it in GitHub Desktop.
Gin Gonic REST sample
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}, | |
} | |
// 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"}) | |
} | |
func main() { | |
router := gin.Default() | |
router.GET("/albums", getAlbums) | |
router.GET("/albums/:id", getAlbumByID) | |
router.POST("/albums", postAlbums) | |
router.Run("localhost:8080") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment