少し間が空きましたが、以前学習していたGoに再入門します。
手始めにデータベース接続するコードを書いてみました。データベースは気軽に使用できるSQLiteを利用しました。テスト用のレコードを作成して、それを取得してみます。
以下は全レコードになります。※貼り方が雑ですみません。
テーブル名:list
id,content,finish,updated,created
1,テスト,0,2022/2/4 21:36:00,2022/2/4 21:36:00
作成したコード
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./todolist.sqlite3")
checkErr(err)
defer db.Close()
rows, err := db.Query("SELECT * FROM list")
checkErr(err)
for rows.Next() {
var id int
var content string
var finish int
var updated string
var created string
err = rows.Scan(&id, &content, &finish, &updated, &created)
checkErr(err)
fmt.Println(id)
fmt.Println(content)
}
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
実行結果
1
テスト
勉強になったこと
取得した全カラムを引数に渡す必要がある
err = rows.Scan(&id, &content, &finish, &updated, &created)
今回出力したいカラムはidとcontentのみですが、その引数だけ渡したらエラーになりました。不必要な情報は取得すべきじゃないので、SQLでワイルドカードを使っているのが不適切ですね。SQLを実行する段階で取得するカラムを絞っておくべきでしょう。
rows, err := db.Query("SELECT * FROM list")
エラーハンドリングを関数化する
これは以下を参考にしました。
https://astaxie.gitbooks.io/build-web-application-with-golang/content/ja/05.3.html
でもこの書き方は一般的なんでしょうか?何が最適なんでしょうね。「郷に入ってはGoに従え」とう名言を良く目にしますし。