<prompt> Tengeneza huduma ndogo ya Golang inayokubali maombi ya HTTP yenye mizigo ya JSON inayowakilisha maumbo ya kijiometri mduara, mstatili, pembetatu na vipimo vyake. Huduma inapaswa kuhesabu eneo na mzunguko wa umbo na kuhifadhi matokeo katika hifadhidata ya PostgreSQL. Zaidi ya hayo, unda sehemu ya mwisho ili kurejesha hesabu zilizohifadhiwa.  <response>: Ili kutengeneza huduma ndogo ya Golang, tutahitaji kufuata hatua hizi:1. Unda mradi mpya wa Go na uingize vifurushi muhimu.2. Bainisha miundo ya data ya maumbo ya kijiometri na vipimo vyake.3. Sanidi seva ya HTTP iliyo na ncha za kushughulikia maombi.4. Tekeleza kazi za kukokotoa eneo na mzunguko wa kila umbo.5. Unganisha kwenye hifadhidata ya PostgreSQL na uunde majedwali ya kuhifadhi mahesabu.6. Ongeza mantiki ili kuhifadhi matokeo yaliyokokotolewa kwenye hifadhidata.7. Unda sehemu ya mwisho ili kurejesha mahesabu yaliyohifadhiwa.Hapa kuna mfano wa utekelezaji:nendakifurushi kikuukuagiza databasesqlusimbajijsonfmtlogihesabunethttpgithub.comgorillamux_ github.comlibpqaina ya muundo wa umbo Andika mfuatano json:ainaRadius kuelea64 json:radius,omitemptyUpana wa kuelea64 json:upana, utupuUrefu wa kuelea64 json:urefu, utupuBase float64 json:base, omitemptySideA float64 json:side_a,ositemptySideB float64 json:side_b,ositemptySideC float64 json:side_c,emptyEneo la kuelea64 json:-Kuelea kwa mzunguko64 json:-var db sql.DBfunc main kosa kosadb, err sql.Openpostgres, useryour_user passwordyour_password dbnameshapes sslmodelemazaikiwa makosa ! nil log.Fatalhitilafuahirisha db.Fungakipanga njia : mux.NewRouterrouter.HandleFunccalculate, CalculateHandler.NjiaPOST.router.HandleFuncmatokeo, ResultsHandler.NjiaGET.log.Fatalhttp.ListenAndServe:8080, kipanga njiafunc CalculateHandlerw http.ResponseWriter, r http.Ombi var sura Umbokosa : json.NewDecoderr.Body.Simbuashapeikiwa makosa ! nil http.Errorw, err.Error, http.StatusBadRequestkurudibadilisha umbo. Aina kesi mduara:umbo.Eneo math.Pi math.Powsura.Radius, 2umbo.Mzunguko 2 math.Pi umbo.Radikesi mstatili:umbo.Eneo umbo.Upana umbo.Urefuumbo.Mzunguko 2 umbo.Upana umbo. Urefukesi pembetatu:s : umbo.SideA shape.SideB shape.SideC 2umbo.Eneo hisabati.Sqrts s - shape.SideA s - shape.SideB s - shape.SideCshape.Perimeter shape.SideA shape.SideB shape.SideCchaguo-msingi:Hitilafu ya http.w, Aina ya umbo batili, http.StatusBadRequestkurudiswala : WEKA NDANI ya maumbo aina, eneo, eneo THAMANI 1, 2, 3_, makosa db.Exechoja, umbo.Aina, umbo.Eneo, umbo.Mzungukoikiwa makosa ! nil http.Errorw, err.Error, http.StatusInternalServerErrorkurudiw.Header.WekaAina ya Maudhui, programujsonjson.NewEncoderw.Simbaumbofunc ResultsHandlerw http.ResponseWriter, r http.Ombi safu mlalo, hitilafu : db.QueryCHAGUA aina, eneo, mzunguko KUTOKA maumboikiwa makosa ! nil http.Errorw, err.Error, http.StatusInternalServerErrorkurudiahirisha safu.Fungavar matokeo Umbokwa safu.Next var sura Umbokosa : safu.Changanuashape.Type, shape.Area, shape.Perimeterikiwa makosa ! nil http.Errorw, err.Error, http.StatusInternalServerErrorkurudimatokeo ongeza matokeo, umbow.Header.WekaAina ya Maudhui, programujsonjson.NewEncoderw.EncodermatokeoKabla ya kuendesha msimbo, hakikisha kuwa umeunda hifadhidata ya PostgreSQL inayoitwa maumbo na ubadilishe vishikilia nafasi kwenye mfuatano wa unganisho na kitambulisho chako halisi. Unahitaji pia kuunda meza inayoitwa maumbo: sqlUNDA maumbo ya JEDWALI id UFUNGUO WA MSINGI WA SERIAL, chapa VARCHAR255 SIYO BATILI, eneo DOUBLE PRECISION NOT NULL, mzunguko DOUBLE PRECISION NOT NULL;Ili kujaribu huduma ndogo, unaweza kutuma maombi ya HTTP kwa kutumia zana kama vile curl au Postman.Kwa mfano, kuhesabu eneo na mzunguko wa duara na radius 5:curl -X POST -H Content-Type: applicationjson -d type: mduara, radius: 5 kurejesha mahesabu yaliyohifadhiwa:curl -X PATA 