<prompt> Anzisha API ya Golang REST inayotumia usajili, uthibitishaji na usimamizi wa watumiaji. API inapaswa kutumia PostgreSQL kama hifadhidata yake na kuingiliana na huduma zingine kama vile arifa za barua pepe baada ya usajili uliofaulu.PLINFORMAT  <response>: nendakifurushi kikuukuagiza github.comgin-gonicginmyappconfigmyappwashughulikiajimyappmiddlewarefunc main db : config.InitDBahirisha db.Fungakipanga njia : gin.DefaultauthGroup : router.GroupauthauthGroup.POSTregister, handlers.RegisterUserauthGroup.POSTlogin, handlers.LoginUseruserGroup : router.Groupmtumiaji.Tumiamiddleware.JWTAuthuserGroup.PUT:id, handlers.SasishaMtumiajiuserGroup.DELETE:id, handlers.DeleteUserrouter.Run:8080nenda config.gousanidi wa kifurushikuagiza databasesqlfmt_ github.comlibpqfunc InitDB sql.DB connStr : hostlocalhost port5432 usermyuser dbnamemydb passwordmypassword sslmodelemazadb, err : sql.Openpostgres, connStrikiwa makosa ! nil hofu makosakurudi dbnenda user.go mifanomifano ya kifurushichapa muundo wa mtumiaji Kitambulisho int64 json:idMfuatano wa barua pepe json:barua pepeMfuatano wa nenosiri json:-func SaveUserdb sql.DB, mtumiaji Mtumiaji kosa Tekeleza kuokoa mtumiaji kwenye hifadhidata.func GetUserByEmaildb sql.DB, kamba ya barua pepe Mtumiaji, hitilafu Tekeleza kurejesha mtumiaji kwa barua pepe yake.func UpdateUserdb sql.DB, mtumiaji Mtumiaji kosa Tekeleza kusasisha mtumiaji kwenye hifadhidata.func DeleteUserdb sql.DB, id int64 kosa Tekeleza kufuta mtumiaji kutoka kwa hifadhidata.nenda auth.go washughulikiajiwashughulikiaji wa vifurushikuagiza myappmifanomyappmatumizigithub.comgin-gonicginfunc RegisterUserc gin.Context Tekeleza kidhibiti cha usajili wa mtumiaji.func LoginUserc gin.Context Tekeleza kidhibiti cha uthibitishaji wa mtumiaji.nenda user.go vishughulikiajiwashughulikiaji wa vifurushikuagiza myappmifanomyapphudumagithub.comgin-gonicginfunc UpdateUserc gin.Context Tekeleza kidhibiti cha sasisho cha mtumiaji.func DeleteUserc gin.Context Tekeleza kidhibiti cha ufutaji cha mtumiaji.nenda jwt.go programu ya katikifurushi cha katiagiza github.comgin-gonicginfunc JWTAuth gin.HandlerFunc return funcc gin.Context Tekeleza programu ya kati ya uthibitishaji wa JWT.nenda email.go hudumahuduma za kifurushifunc SendEmailkwa, somo, kamba ya mwili kosa Tekeleza kutuma barua pepe kwa kutumia SMTP au huduma ya nje kama vile SendGrid.nenda password.go vifaamatumizi ya kifurushifunc HashPasswordkamba ya nenosiri kamba, makosa Tekeleza hashing nenosiri.func CheckPasswordHashnenosiri, kamba ya hashi bool Tekeleza kuangalia ikiwa nenosiri linalingana na toleo la haraka. 