<prompt> Unda API ya Golang REST ambayo inaruhusu watumiaji kuunda, kusoma, kusasisha na kufuta madokezo. API inapaswa kutumia hifadhidata ya PostgreSQL kwa kuhifadhi na kuthibitisha watumiaji kwa tokeni za JWT.  <response>: Ili kuunda API ya Golang REST ambayo inaruhusu watumiaji kufanya shughuli za CRUD kwenye madokezo na kutumia PostgreSQL kwa hifadhi, fuata hatua hizi:1. Sakinisha vifurushi vinavyohitajikaKwanza, unahitaji kufunga vifurushi muhimu kwa mradi wako.bashinenda upate -u github.comgorillamuxnenda upate -u github.comjinzhugormnenda kupata -u github.comlibpqnenda upate -u github.comdgrijalvajwt-go2. Unda faili ya main.goUnda faili ya main.go katika saraka ya mradi wako na maudhui yafuatayo:nendakifurushi kikuukuagiza loginethttpgithub.comgorillamuxfunc main kipanga njia : mux.NewRouterlog.Fatalhttp.ListenAndServe:8000, kipanga njia3. Unganisha kwenye hifadhidata ya PostgreSQLOngeza chaguo za kukokotoa kiitwacho connectDB ili kuanzisha muunganisho kwenye hifadhidata ya PostgreSQL kwa kutumia GORM.nendakifurushi kikuu...kuagiza ...fmtgithub.comjinzhugorm_ github.comlibpqvar db gorm.DBkosa kosafunc connectDB dbInfo : fmt.Sprintfhosts portd users passwords dbnames sslmodelemaza,localhost, 5432, your_user, password_yako, jina_la_dbdb, err gorm.Openpostgres, dbInfoikiwa makosa ! nil hofu makosafmt.PrintlnImeunganishwa kwenye hifadhidatafunc main connectDBahirisha db.Funga...4. Fafanua mfano wa KumbukaBainisha muundo unaoitwa Kumbuka unaowakilisha kipengee cha noti.nendaaina ya muundo wa noti Kitambulisho cha json:idMfuatano wa kichwa json:kichwaMfuatano wa maudhui json:maudhuiUserID uint json:-ImeundwaWakati.WakatiUpdatedAt time.Time5. Unda njia na vidhibiti vya shughuli za CRUDOngeza vitendaji vifuatavyo ili kushughulikia kuunda, kusoma, kusasisha na kufuta shughuli kwenye madokezo:nendafunc createNotew http.ResponseWriter, r http.Ombi ...func getNotesw http.ResponseWriter, r http.Ombi ...func getNotew http.ResponseWriter, r http.Ombi ...func updateNotew http.ResponseWriter, r http.Ombi ...func deleteNotew http.ResponseWriter, r http.Ombi ...6. Kusajili njia katika kazi kuunendafunc main connectDBahirisha db.Fungakipanga njia : mux.NewRouterrouter.HandleFuncapinotes, createNote.NjiaPOST.router.HandleFuncapinotes, getNotes.NjiaGET.router.HandleFuncapinotesid, getNote.NjiaGET.router.HandleFuncapinotesid, updateNote.NjiaPUT.router.HandleFuncapinotesid, deleteNote.NjiaFUTA.log.Fatalhttp.ListenAndServe:8000, kipanga njia7. Tekeleza uthibitishaji wa JWTUnda faili mpya inayoitwa auth.go yenye maudhui yafuatayo:nendakifurushi kikuukuagiza fmtnethttpkambagithub.comdgrijalvajwt-gofunc thibitishahttp.HandlerFunc inayofuata http.HandlerFunc return funcw http.ResponseWriter, r http.Ombi authHeader : r.Header.GetUidhinishajiikiwa authHeader Hitilafu ya http.w, Kichwa cha Uidhinishaji Kinachokosekana, http.Hali HaijaidhinishwakuruditokenString : strings.SplitauthHeader, 1ishara, err : jwt.ParsetokenString, functoken jwt.Token kiolesura, hitilafu ikiwa _, sawa : token.Method.jwt.SigningMethodHMAC; !sawa return nil, fmt.ErrorfNjia ya kutia sahihi isiyotarajiwa: v, token.Headeralgreturn byteyour_secret_key, hakunaikikosea ! nil !ishara.Inafaa http.Hitilafuw, ishara batili, http.Hali Haijaidhinishwakurudiinayofuata.ServeHTTPw, rSasisha njia zako ili kutumia authenticate middleware:nendarouter.HandleFuncapinotes, thibitishacreateNote.NjiaPOST.router.HandleFuncapinotes, thibitishagetNotes.NjiaGET.router.HandleFuncapinotesid, thibitishagetNote.NjiaGET.router.HandleFuncapinotesid, thibitishaupdateNote.NjiaPUT.router.HandleFuncapinotesid, thibitishadeleteNote.NjiaFUTA.Sasa una Golang REST API ambayo inaruhusu watumiaji kuunda, kusoma, kusasisha na kufuta madokezo. API hutumia hifadhidata ya PostgreSQL kwa kuhifadhi na kuthibitisha watumiaji kwa tokeni za JWT. 