package main import ( "database/sql" "fmt" "log" _ "github.com/mattn/go-sqlite3" ) var db *sql.DB type Album struct { ID int64 Title string Artist string Price float32 } type Test_counter struct { ID int64 Counter int64 } func main() { var err error db, err = sql.Open("sqlite3", "./db.sqlite3") if err != nil { log.Fatal(err) } pErr := db.Ping() if pErr != nil { log.Fatal(pErr) } fmt.Println("Connected!") count, err := counterIncrement() if err != nil { log.Fatal(err) } fmt.Println("You are visitor #", count) albums, err := albumsByArtist("John Coltrane") if err != nil { log.Fatal(err) } fmt.Printf("Albums found: %v\n", albums) } func counterIncrement() (int64, error) { _, err := db.Exec("UPDATE `test_counter` SET `counter` = `counter`+1 WHERE `id` = 0") if err != nil { return 0, fmt.Errorf("counterIncrement: %v", err) } var count int64 row := db.QueryRow("SELECT counter FROM test_counter WHERE id = 0") if err := row.Scan(&count); err != nil { if err == sql.ErrNoRows { return count, fmt.Errorf("counterIncrement: NO COUNTER") } return count, fmt.Errorf("counterIncrement: %v", err) } return count, nil } func albumsByArtist(name string) ([]Album, error) { var albums []Album rows, err := db.Query("SELECT * FROM album WHERE artist = ?", name) if err != nil { return nil, fmt.Errorf("albumbsByArtist %q: %v", name, err) } defer rows.Close() for rows.Next() { var alb Album if err := rows.Scan(&alb.ID, &alb.Title, &alb.Artist, &alb.Price); err != nil { return nil, fmt.Errorf("albumbsByArtist %q: %v", name, err) } albums = append(albums, alb) } if err := rows.Err(); err != nil { return nil, fmt.Errorf("albumbsByArtist %q: %v", name, err) } return albums, nil }