Skip to content

Instantly share code, notes, and snippets.

@kuc-arc-f
Created September 23, 2025 00:27
Show Gist options
  • Select an option

  • Save kuc-arc-f/c57537b4298ee79b8709a606a736d02b to your computer and use it in GitHub Desktop.

Select an option

Save kuc-arc-f/c57537b4298ee79b8709a606a736d02b to your computer and use it in GitHub Desktop.
GoLang, Turso SDK example
TURSO_DATABASE_URL=""
TURSO_AUTH_TOKEN=

turso_cli

Version: 0.9.1

date    : 2025/09/22

update :


GoLange , turso SDK example


setup

  • .env
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 .

package main
import (
"database/sql"
"fmt"
"log"
"os"
"github.com/joho/godotenv"
_ "github.com/tursodatabase/libsql-client-go/libsql"
)
type User struct {
ID int
Name string
}
func main() {
err := godotenv.Load()
if err != nil {
log.Fatalf("Error loading .env file: %s", err)
}
// 環境変数から取得
dbURL := os.Getenv("TURSO_DATABASE_URL")
authToken := os.Getenv("TURSO_AUTH_TOKEN")
if dbURL == "" || authToken == "" {
log.Fatal("TURSO_DATABASE_URL または TURSO_AUTH_TOKEN が設定されていません")
}
// 接続文字列にトークンを付与
fullURL := fmt.Sprintf("%s?authToken=%s", dbURL, authToken)
// DB 接続
db, err := sql.Open("libsql", fullURL)
if err != nil {
log.Fatalf("failed to open db: %v", err)
}
defer db.Close()
// テーブル作成(もしまだなら)
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
);`)
if err != nil {
log.Fatalf("failed to create table: %v", err)
}
// データ登録 INSERT
insertUser(db, "Taro")
insertUser(db, "Hanako")
// 削除: ID=2 のユーザーを削除
if err := deleteUser(db, 3); err != nil {
log.Println(err)
}
// 更新: ID=1 のユーザーを "Jiro" に変更
if err := updateUser(db, 1, "Jiro-up"); err != nil {
log.Println(err)
}
// 一覧取得 SELECT
users, err := listUsers(db)
if err != nil {
log.Fatalf("failed to list users: %v", err)
}
for _, u := range users {
fmt.Printf("ID=%d, Name=%s\n", u.ID, u.Name)
}
}
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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment