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.