Created
January 30, 2025 16:47
-
-
Save garvit-exe/6bd6849c78736f1d27807dee1bea5955 to your computer and use it in GitHub Desktop.
web-service-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