advance web service with golang
Step 1: Import Required Packages
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
)
Step 2: Define a Struct for Data Model
type Item struct {
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Price float64 `json:"price,omitempty"`
}
Step 3: Initialize a Slice to Hold Data
var items []Item
Step 4: Implement CRUD Operations
func GetItems(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(items)
}
func GetItem(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
for _, item := range items {
if item.ID == params["id"] {
json.NewEncoder(w).Encode(item)
return
}
}
json.NewEncoder(w).Encode(&Item{})
}
func CreateItem(w http.ResponseWriter, r *http.Request) {
var item Item
_ = json.NewDecoder(r.Body).Decode(&item)
items = append(items, item)
json.NewEncoder(w).Encode(items)
}
func UpdateItem(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
for index, item := range items {
if item.ID == params["id"] {
items = append(items[:index], items[index+1:]...)
var newItem Item
_ = json.NewDecoder(r.Body).Decode(&newItem)
newItem.ID = params["id"]
items = append(items, newItem)
json.NewEncoder(w).Encode(items)
return
}
}
json.NewEncoder(w).Encode(items)
}
func DeleteItem(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
for index, item := range items {
if item.ID == params["id"] {
items = append(items[:index], items[index+1:]...)
break
}
}
json.NewEncoder(w).Encode(items)
}
Step 5: Create and Configure the Router
func main() {
router := mux.NewRouter()
router.HandleFunc("/items", GetItems).Methods("GET")
router.HandleFunc("/items/{id}", GetItem).Methods("GET")
router.HandleFunc("/items", CreateItem).Methods("POST")
router.HandleFunc("/items/{id}", UpdateItem).Methods("PUT")
router.HandleFunc("/items/{id}", DeleteItem).Methods("DELETE")
log.Fatal(http.ListenAndServe(":8000", router))
}
Step 6: Run the Application
go run main.go
Now you have a basic web service in Go with CRUD operations for managing items. The service listens on port 8000, and you can test it using tools like curl or Postman.