<prompt> Tengeneza programu ya Golang inayounganisha kwenye hifadhidata ya PostgreSQL na kufanya shughuli za kimsingi za CRUD kwenye jedwali la watumiaji. Jedwali la watumiaji linapaswa kuwa na sehemu za kitambulisho, jina, barua pepe na umri.  <response>: Ili kuunda programu ya Golang inayounganisha kwenye hifadhidata ya PostgreSQL na kufanya shughuli za kimsingi za CRUD kwenye jedwali la watumiaji, fuata hatua hizi:1. Sakinisha vifurushi vinavyohitajika:- Kwanza, unahitaji kusakinisha kifurushi cha pq ambacho ni kiendeshi cha PostgreSQL cha kifurushi cha databasesql cha Go.bashinenda kupata -u github.comlibpq2. Unda folda mpya ya mradi wako na uanzishe kama moduli ya Go:bashimkdir go-postgres-crudcd kwenda-postgres-crudgo mod init example.comgo-postgres-crud3. Unda faili ya main.go kwenye mzizi wa folda ya mradi wako.4. Ongeza msimbo ufuatao kwa main.go:nendakifurushi kikuukuagiza databasesqlfmtlogi_ github.comlibpqconst mwenyeji mwenyeji wa ndanibandari 5432mtumiaji postgresnenosiri nenosiri lakodbname jina lako-dbchapa muundo wa mtumiaji ID inMfuatano wa jinaMfuatano wa barua pepeUmri intfunc main psqlInfo : fmt.Sprintfhosts portd users passwords dbnames sslmodelemaza,mwenyeji, bandari, mtumiaji, nenosiri, dbnamedb, makosa : sql.Funguapostgres, psqlInfoikiwa makosa ! nil log.Fatalhitilafuahirisha db.Fungamakosa db.Pingikiwa makosa ! nil log.Fatalhitilafufmt.PrintlnImeunganishwa kwa mafanikio! Fanya shughuli za CRUD hapaBadilisha nenosiri lako na jina lako-db kwa nenosiri lako halisi la PostgreSQL na jina la hifadhidata.5. Tekeleza kazi za CRUD:Unda mtumiaji:nendafunc createUserdb sql.DB, user User kosa sqlTaarifa : WEKA NDANI ya watumiaji jina, barua pepe, umriTHAMANI 1, 2, 3RUDISHA kitambulishoerr : db.QueryRowsqlStatement, user.Name, user.Email, user.Age.Scanuser.IDikiwa makosa ! nil kurudi makosafmt.PrintlnKitambulisho kipya cha rekodi ni:, kitambulisho cha mtumiajikurudi hakunaSoma mtumiaji kwa kitambulisho:nendafunc getUserByIDdb sql.DB, id int Mtumiaji, kosa sqlStatement : CHAGUA kitambulisho, jina, barua pepe, umri KUTOKA kwa watumiaji WHERE id1;var mtumiaji Mtumiajisafu mlalo : db.QueryRowsqlStatement, kitambulishoerr : row.Scanuser.ID, user.Name, user.Email, user.Agebadilisha kosa kesi sql.ErrNoRows:fmt.PrintlnHakuna safu mlalo zilizorejeshwa!kurudi nil, makosakesi hakuna:kurudi mtumiaji, nilchaguo-msingi:kurudi nil, makosaSasisha mtumiaji kwa kitambulisho:nendafunc updateUserByIDdb sql.DB, id int, user User kosa sqlTaarifa : SASISHA watumiajiSET jina 2, barua pepe 3, umri 4WAPI kitambulisho 1;res, err : db.ExecsqlStatement, id, user.Name, user.Email, user.Ageikiwa makosa ! nil kurudi makosarowsAffected, err : res.RowsAffectedikiwa makosa ! nil kurudi makosafmt.PrintlnIdadi ya rekodi zilizosasishwa:, safu Mlalo Zilizoathiriwakurudi hakunaFuta mtumiaji kwa kitambulisho:nendafunc deleteUserByIDdb sql.DB, id int kosa sqlStatement : FUTA KUTOKA KWA watumiaji WAPI id 1;res, err : db.ExecsqlStatement, idikiwa makosa ! nil kurudi makosarowsAffected, err : res.RowsAffectedikiwa makosa ! nil kurudi makosafmt.PrintlnIdadi ya rekodi imefutwa:, safu Mlalo Zilizoathiriwakurudi hakuna6. Tumia vitendaji vya CRUD katika kitendakazi chako kuu:nendafunc main ... Unda mtumiajinewUser : MtumiajiJina: John Doe, Barua pepe: Umri: 30makosa createUserdb, newUserikiwa makosa ! nil log.Fatalhitilafu Pata mtumiaji kwa kitambulishomtumiaji, kosa : getUserByIDdb, 1ikiwa makosa ! nil log.Fatalhitilafufmt.PrintfMtumiaji: vn, mtumiaji Sasisha mtumiaji kwa kitambulishoupdatedUser : MtumiajiJina: Jane Doe, Barua pepe: Umri: 28makosa updateUserByIDdb, 1, updatedUserikiwa makosa ! nil log.Fatalhitilafu Futa mtumiaji kwa kitambulishomakosa deleteUserByIDdb, 2ikiwa makosa ! nil log.Fatalhitilafu7. Tekeleza maombi yako:bashikwenda kukimbia main.goHii itaunganishwa kwenye hifadhidata yako ya PostgreSQL na kufanya shughuli za kimsingi za CRUD kwenye jedwali la watumiaji.Hakikisha umeunda jedwali la watumiaji kwenye hifadhidata yako ya PostgreSQL na schema ifuatayo: sqlTUNZA watumiaji wa TABLE id UFUNGUO WA MSINGI WA SERIAL, jina VARCHAR100 SI UFUPI, barua pepe VARCHAR100 UNIQUE NOT NULL, umri INTEGER SI UFUPI; 