Go言語の勉強をちょこちょこ始めています。
まずはDB操作をということで、CRUDを試して見ました
いきなりソースコード
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
dbconf := "root:password@tcp(127.0.0.1:3306)/practice?charset=utf8mb4"
db, err := sql.Open("mysql", dbconf)
if err != nil {
fmt.Println(err.Error())
}
defer db.Close()
err = db.Ping()
if err != nil {
fmt.Println("データベース接続失敗")
return
} else {
fmt.Println("データベース接続成功")
}
// INSERT
fmt.Println("Insert")
sqlInsert(db)
// UPDATE
fmt.Println("Update")
sqlUpdate(db)
// DELETE
fmt.Println("Delete")
sqlDelete(db)
// SELECT
fmt.Println("Select")
sqlSelect(db)
}
// Insert
func sqlInsert(db *sql.DB) {
ins, err := db.Prepare("INSERT INTO test VALUES (null, ?)")
if err != nil {
log.Fatal(err)
}
res, err := ins.Exec("messsage 1")
if err != nil {
log.Fatal(err)
}
lastInsertId, err := res.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Println(lastInsertId)
res, err = ins.Exec("messsage 2")
if err != nil {
log.Fatal(err)
}
lastInsertId, err = res.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Println(lastInsertId)
res, err = ins.Exec("messsage 3")
if err != nil {
log.Fatal(err)
}
lastInsertId, err = res.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Println(lastInsertId)
}
// UPDATE
func sqlUpdate(db *sql.DB) {
upd, err := db.Prepare("UPDATE test SET message = ? WHERE id = 1")
if err != nil {
log.Fatal(err)
}
res, err := upd.Exec("updated message")
if err != nil {
log.Fatal(err)
}
lastInsertId, err := res.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Println(lastInsertId)
}
// DELETE
func sqlDelete(db *sql.DB) {
upd, err := db.Prepare("DELETE FROM test WHERE id = ?")
if err != nil {
log.Fatal(err)
}
res, err := upd.Exec(2)
if err != nil {
log.Fatal(err)
}
lastInsertId, err := res.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Println(lastInsertId)
}
// SELECT
func sqlSelect(db *sql.DB) {
rows, err := db.Query("SELECT id, message FROM test")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var (
id int
message string
)
err := rows.Scan(&id, &message)
if err != nil {
panic(err.Error())
}
fmt.Println("id=", id, "message=", message)
}
}
上記の実行結果がこちら
一回動作確認しちゃったので、IDは3から始まっています。
DELETE文の引数でID=2を指定しているので、DELETEは空振りしていますね・・・
VSCodeの出力結果はこんな感じで、それぞれ処理が行われていることがわかります。
以上
短いですが、以上です。
ORマッパーも利用していないため、かなりシンプルに書くことができました。
Goのdeferを利用することでDBの閉じ忘れも防止できそうです。
created by Rinker
¥3,278
(2024/10/27 18:13:02時点 楽天市場調べ-詳細)