Postgres är en av de populära SQL-databaserna på grund av dess många funktioner och användarvänlighet. Postgres är ACID-kompatibel med funktioner som Multi-Version Concurrency Control, asynkron replikering, kapslade transaktioner och skrivningsloggning. Tillsammans med många andra gör dessa funktioner Postgres till det bästa SQL-databashanteringssystemet.
Go-ekosystemet är hem för många paket för interaktion med olika DBMS, inklusive Postgres. Go tillhandahåller den inbyggda databas/sql paket för att arbeta med SQL-databaser med databasdrivrutiner. Med hjälp av Go-datastrukturer kan du integrera populära ORM från tredje part som GORM för enkel interaktion med din databas.
Komma igång med GORM och Postgres
GORM-paketet är en av de mest populära ORM: erna i Go-ekosystemet eftersom den är utvecklarvänlig, funktionsrik och bygger på de databas/sql paket.
GORM tillhandahåller funktionalitet för automatiska migrering, loggning, förberedda uttalanden, transaktioner och sönderdelning. Paketet tar koden först med hjälp av strukturer och andra inbyggda datatyper.
Kör detta terminalkommando i din arbetskatalog för att lägga till GORM-paketet till ditt projekts beroenden:
gå hämta gorm.io/gorm\n
Du behöver en databasdrivrutin för att arbeta med GORM-paketet. GORM tillhandahåller databasdrivrutiner för populära DBMS. Kör det här kommandot i din arbetskatalog för att installera GORM Postgres förare:
gå hämta gorm.io/driver/postgres\n
Ansluta Postgres med Go med GORM
Importera dessa paket i din Go-fil för att arbeta med ORM- och databasdrivrutinen. Du kommer att använda logga paket för att logga fel till din konsol och fmt paket för utskrift.
importera (\n "fmt"\n "gorm.io/driver/postgres"\n "gorm.io/gorm"\n "logga"\n)\n
Du behöver en anslutningssträng för att ansluta till din Postgres databas i löparmiljön. Du kan använda en struct som modell för fälten som utgör anslutningssträngen. Att använda en struct gör det lättare att ändra och testa olika värden, speciellt i fall av beroendeinjektion.
Här är ett exempel på en strukturmodell för fälten som utgör anslutningssträngen:
typ Konfig struktur {\n Värd sträng\n Port sträng\n Lösenord sträng\n Användare sträng\n DB-namn sträng\n SSLMode sträng\n}\n
Nedan finns en typisk funktion för din databasanslutning. Den returnerar anslutningsinstansen och ett fel beroende på anslutningsstatus.
funcNy anslutning()(*gorm. DB, fel) {\n lämna tillbaka db, noll\n}\n
Du kan instansiera anslutningsstrukturmodellen och fylla fälten med värdena i din Postgres-databas.
konfigurationer := Konfig{\n Värd: "databas_värd",\n Port: "database_Port",\n Lösenord: "database_Password",\n Användare: "databas_användare",\n DB-namn: "Databas namn",\n SSLMode: "falsk",\n }\n dsn := fmt. Sprintf("host=%s port=%s användare=%s lösenord=%s dbname=%s sslmode=%s", konfigurationer. Värd, konfigurationer. Port, konfigurationer. Användare, konfigurationer. Lösenord, konfigurationer. DBnamn, konfigurationer. SSLMode)\n
De dsn variabeln använder Sprintf formateringsmetod och Gå strängformatera verb att sammanfoga fälten av Konfig struct och ställ in Postgres-anslutningssträngen.
Du kan öppna en databasanslutning med GORM med hjälp av Öppen metod. De Öppen metoden tar in en öppen anslutning från en databasdrivrutin och en lista över valfria konfigurationer från Konfig typ av GORM-paketet. Den returnerar en anslutningsinstans och ett valfritt fel.
db, fel := gorm. Öppna (postgres. Öppna (dsn), &gorm. Konfig{})\n om fel!= noll {\n lämna tillbaka db, err\n }\n
Pingar databasen för att verifiera anslutningsstatus
Du kan pinga din databas för att verifiera hälso-/onlinestatusen med en funktion som returnerar ett booleskt resultat eller ett fel om databasanslutningen är ogiltig.
funcPingDb()(bool, fel) {\n \n lämna tillbakaSann, noll\n}\n
Du måste skapa en ny anslutningsinstans för att pinga databasen. Här är ett exempel med hjälp av Ny anslutning funktion för att skapa en anslutningsinstans:
connectionInstance, err := NewConnection()\n om fel!= noll {\n logg. Fatalf("Databasanslutningen misslyckades %v", fel. Error())\n }\n
När du har fått en anslutningsinstans skapar du en databasinstans med DB anslutningssätt.
dbConnection, err := connectionInstance. DB()\n om fel!= noll {\n lämna tillbakafalsk, err\n } \n
Du kan pinga databasen med Ping metod för databasinstansen. De Ping metod returnerar eventuella fel eller noll om anslutningen lyckades.
\n fel = dbAnslutning. Ping()\n om fel!= noll {\n lämna tillbakafalsk, err\n } annan {\n \n fmt. Println("Anslutningen lyckades")\n }\n
En framgångsrik körning bör resultera i utdata som liknar detta:
Du kan använda databasen/sql-paketet för att arbeta med SQL Database i Go
De databas/sql paketet kan utökas, och eftersom de flesta Go-databaspaket och drivrutiner utökar paketet, kan du använda paketet i dina projekt istället för att välja ORM.
GORM tillhandahåller också en SQL-byggare för att bygga rå SQL, vilket är användbart för operationer som inte stöds.