Go unterstützt die Integration mit vielen verschiedenen Datenbanken, sowohl relationale als auch NoSQL-Datenbanken. Wir werden uns hier auf die Verwendung von SQLite als Beispiel konzentrieren, da es einfach einzurichten und zu verwenden ist.
Um SQLite in Go zu verwenden, müssen wir den entsprechenden Treiber
installieren. Wir verwenden mattn/go-sqlite3:
go get github.com/mattn/go-sqlite3Zuerst erstellen wir eine Verbindung zur Datenbank. Hier ein einfaches Beispiel:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./test.db")
if err != nil {
fmt.Println("Error opening database:", err)
return
}
defer db.Close()
fmt.Println("Database connection established")
}In diesem Beispiel:
database/sql-Paket und den
SQLite-Treiber.test.db.Sobald wir eine Verbindung zur Datenbank haben, können wir eine Tabelle erstellen:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./test.db")
if err != nil {
fmt.Println("Error opening database:", err)
return
}
defer db.Close()
createTableSQL := `CREATE TABLE IF NOT EXISTS users (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" TEXT
);`
_, err = db.Exec(createTableSQL)
if err != nil {
fmt.Println("Error creating table:", err)
return
}
fmt.Println("Table created successfully")
}In diesem Beispiel:
users zu erstellen.db.Exec aus und
überprüfen, ob ein Fehler aufgetreten ist.Nun fügen wir einige Daten in die Tabelle ein:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./test.db")
if err != nil {
fmt.Println("Error opening database:", err)
return
}
defer db.Close()
insertUserSQL := `INSERT INTO users (name) VALUES (?)`
statement, err := db.Prepare(insertUserSQL)
if err != nil {
fmt.Println("Error preparing statement:", err)
return
}
defer statement.Close()
_, err = statement.Exec("Alice")
if err != nil {
fmt.Println("Error inserting data:", err)
return
}
fmt.Println("Data inserted successfully")
}In diesem Beispiel:
db.Prepare vor.statement.Exec aus und fügen den Benutzer “Alice” ein.Schließlich rufen wir die Daten aus der Tabelle ab und zeigen sie an:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./test.db")
if err != nil {
fmt.Println("Error opening database:", err)
return
}
defer db.Close()
query := `SELECT id, name FROM users`
rows, err := db.Query(query)
if err != nil {
fmt.Println("Error querying data:", err)
return
}
defer rows.Close()
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
if err != nil {
fmt.Println("Error scanning row:", err)
return
}
fmt.Printf("ID: %d, Name: %s\n", id, name)
}
}In diesem Beispiel:
id und
name aus der Tabelle users auszuwählen.db.Query aus und erhalten
die Ergebnismenge rows.id und name, die wir dann
ausgeben.