package main import ( "log" "strings" "os" "database/sql" _ "github.com/mattn/go-sqlite3" ) type User struct { id int64 name string } func create_user(db *sql.DB, name string) (User) { s := prep_query(db, "INSERT INTO users (name) VALUES (?)") res, err := s.Exec(name) check(err) var u User id, _ := res.LastInsertId() u.id = id u.name = name return u } func get_user(db *sql.DB, name string) (User) { s := prep_query(db, "SELECT * FROM users WHERE name = ? LIMIT 1") res, err := s.Query(name) check(err) var u User res.Next() res.Scan(&u.id, &u.name) res.Close() if u.id == 0 { return create_user(db, name) } else { return u } } // Blerk. Start here with a get/create and see where // that goes... type Entity struct { id int64 user_id int64 name string spawn_line string } func check(e error) { if e != nil { panic(e) } } func prep_query(db *sql.DB, q string) (*sql.Stmt){ statement, err := db.Prepare(q) check(err) return statement } func reset_database(db *sql.DB) { dat, _ := os.ReadFile("setup.sql") queries := strings.Split(string(dat), ";") for _, q := range queries { _, err := db.Exec(q) check(err) } } func main() { db, _ := sql.Open("sqlite3", "rpgqui.db") reset_database(db) var u User u = get_user(db, "Monqui") log.Printf("ID: %d, name: %s", u.id, u.name) u = get_user(db, "dug") log.Printf("ID: %d, name: %s", u.id, u.name) u = get_user(db, "Gary") log.Printf("ID: %d, name: %s", u.id, u.name) u = get_user(db, "Jimbo") log.Printf("ID: %d, name: %s", u.id, u.name) }