<prompt> Unda API rahisi ya REST katika Golang ambayo inaruhusu watumiaji kuunda, kusoma, kusasisha na kufuta madokezo, kuhifadhi data katika hifadhidata ya MariaDB.PLINFORMAT  <response>: nendakifurushi kikuukuagiza databasesqlusimbajijsonfmtloginethttpgithub.comgorillamux_ github.comgo-sql-drivermysql Unganisha kwenye hifadhidata ya MariaDBfunc dbConn db sql.DB dbDriver : mysqldbUser : mtumiaji_wakodbPass : nywila_ya_dbdbName : jina_la_ lakodbHost : localhostdbPort : 3306connStr : fmt.Sprintfs:stcps:ss, dbUser, dbPass, dbHost, dbPort, dbNamedb, kosa : sql.OpendbDriver, connStrikiwa makosa ! nil hofuerr.Errorkurudi db Muundo wa kumbukumbuaina ya muundo wa noti Kitambulisho int json:idMfuatano wa kichwa json:kichwaMfuatano wa maudhui json:maudhui CreateNote huunda noti mpya kwenye hifadhidata.func CreateNotew http.ResponseWriter, r http.Ombi db : dbConnahirisha db.Fungavar notekosa : json.NewDecoderr.Body.Simbuanoteikiwa makosa ! nil http.Errorw, err.Error, http.StatusBadRequestkurudiinsertQuery : WEKA MADOKEZOkichwa, maudhui THAMANI?, ?stmt, err : db.PrepareinsertQueryikiwa makosa ! nil hofuerr.Errordefer stmt.Closematokeo, makosa : stmt.Execnote.Title, note.Contentikiwa makosa ! nil hofuerr.Errorid, makosa :matokeo.LastInsertIdikiwa makosa ! nil hofuerr.Errornote.ID intidw.Header.WekaAina ya Maudhui, programujsonjson.NewEncoderw.Encodernote GetNotes hupata maelezo yote kutoka kwa hifadhidata.Func GetNotesw http.ResponseWriter, r http.Request db : dbConnahirisha db.FungaselectQuery : CHAGUA kitambulisho, kichwa, maudhui KUTOKA kwa vidokezosafu mlalo, kosa : db.QueryselectQueryikiwa makosa ! nil hofuerr.Errorahirisha safu.Fungavar notes Kumbukakwa safu.Next var noteerr : rows.Scannote.ID, note.Title, note.Contentikiwa makosa ! nil hofuerr.Errornoti ongeza maelezo, notiw.Header.WekaAina ya Maudhui, programujsonjson.NewEncoderw.Encodemaelezo UpdateNote inasasisha noti iliyopo kwenye hifadhidata.func UpdateNotew http.ResponseWriter, r http.Ombi db : dbConnahirisha db.Fungavars : mux.Varsrid : varsidvar notekosa : json.NewDecoderr.Body.Simbuanoteikiwa makosa ! nil http.Errorw, err.Error, http.StatusBadRequestkurudiupdateQuery : SASISHA madokezo SET title?, content? WHERE id?stmt, err : db.PrepareupdateQueryikiwa makosa ! nil hofuerr.Errordefer stmt.Close_, err stmt.Execnote.Title, note.Content, idikiwa makosa ! nil hofuerr.Errorw.WriteHeaderhttp.StatusNoContent DeleteNote hufuta noti kutoka kwa hifadhidata.func DeleteNotew http.ResponseWriter, r http.Ombi db : dbConnahirisha db.Fungavars : mux.Varsrid : varsiddeleteQuery : FUTA KUTOKA KWA vidokezo WAPI id?stmt, err : db.PreparedeleteQueryikiwa makosa ! nil hofuerr.Errordefer stmt.Close_, makosa stmt.Execidikiwa makosa ! nil hofuerr.Errorw.WriteHeaderhttp.StatusNoContentfunc main kipanga njia : mux.NewRouterrouter.HandleFuncnotes, CreateNote.NjiaPOST.router.HandleFuncnotes, GetNotes.NjiaGET.router.HandleFuncnotesid, UpdateNote.NjiaPUT.router.HandleFuncnotesid, DeleteNote.NjiaFUTA.log.Fatalhttp.ListenAndServe:8080, kipanga njia 