Open1

GoLang , Turso SDK 使用メモ

knaka Tech-Blogknaka Tech-Blog

概要

  • GoLang , Turso メモになります。

[ 公開 2025/09/23]


関連

https://docs.turso.tech/sdk/go/quickstart


環境

  • go version go1.24.4
  • Turso
  • libsql

書いたコード

https://gist.github.com/kuc-arc-f/c57537b4298ee79b8709a606a736d02b


  • .env
  • turso-URL, token
  • リモート接続
TURSO_DATABASE_URL=""
TURSO_AUTH_TOKEN=

  • start
go mod init example.com/tursocli
go get github.com/joho/godotenv
go get github.com/tursodatabase/libsql-client-go/libsql
go mod tidy

go run .

  • table
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);

  • data add , 数件追加
INSERT INTO users(name) VALUES('john-1'); 
INSERT INTO users(name) VALUES('john-2'); 
INSERT INTO users(name) VALUES('john-3'); 
INSERT INTO users(name) VALUES('john-4'); 
INSERT INTO users(name) VALUES('john-5'); 


  • CRUD一部操作, INSERT UPDATE, DELETE SELECT
  • server.go

func insertUser(db *sql.DB, name string) {
    result, err := db.Exec("INSERT INTO users (name) VALUES (?)", name)
    if err != nil {
        log.Printf("failed to insert user: %v", err)
        return
    }
    id, err := result.LastInsertId()
    if err != nil {
        log.Printf("failed to get last insert id: %v", err)
        return
    }
    log.Printf("Inserted user %s with ID %d", name, id)
}

func listUsers(db *sql.DB) ([]User, error) {
    rows, err := db.Query("SELECT id, name FROM users")
    if err != nil {
        return nil, err
    }
    defer rows.Close()

    var users []User
    for rows.Next() {
        var u User
        if err := rows.Scan(&u.ID, &u.Name); err != nil {
            return nil, err
        }
        users = append(users, u)
    }
    if err := rows.Err(); err != nil {
        return nil, err
    }
    return users, nil
}

func deleteUser(db *sql.DB, id int) error {
    result, err := db.Exec("DELETE FROM users WHERE id = ?", id)
    if err != nil {
        return fmt.Errorf("failed to delete user: %w", err)
    }

    rows, err := result.RowsAffected()
    if err != nil {
        return fmt.Errorf("failed to get rows affected: %w", err)
    }

    if rows == 0 {
        log.Printf("No user found with ID=%d", id)
    } else {
        log.Printf("Deleted user ID=%d", id)
    }
    return nil
}

func updateUser(db *sql.DB, id int, newName string) error {
    result, err := db.Exec("UPDATE users SET name = ? WHERE id = ?", newName, id)
    if err != nil {
        return fmt.Errorf("failed to update user: %w", err)
    }

    rows, err := result.RowsAffected()
    if err != nil {
        return fmt.Errorf("failed to get rows affected: %w", err)
    }

    if rows == 0 {
        log.Printf("No user found with ID=%d", id)
    } else {
        log.Printf("Updated user ID=%d, newName=%s", id, newName)
    }
    return nil
}