KindleのXMLをTSVに変換する
ExcelだとXMLファイル読めるらしい(試してない)けど、Googleスプレッドシートだと読み込めなかったので、TSVに変換して読み込めた。
goのencoding/xml
使って、割と簡単に書けたけど、AuthorsとPublishersが配列になっているところ、structを作って配列にしても最後のものしか読み込まれず、タグをxml:"authors>author"
みたいにしたら解決できた。
POSTS
ExcelだとXMLファイル読めるらしい(試してない)けど、Googleスプレッドシートだと読み込めなかったので、TSVに変換して読み込めた。
goのencoding/xml
使って、割と簡単に書けたけど、AuthorsとPublishersが配列になっているところ、structを作って配列にしても最後のものしか読み込まれず、タグをxml:"authors>author"
みたいにしたら解決できた。
デプロイのエラーは、go clean -modcache
してgo.sum
削除してgo.mod
のrequire全削除してgo mod tidy
したら直った。
何が効いたのかはわからない。
ログは、JSON形式で出力しないといけないのかと思ってそのように書いてみたら、そのまま記録されて構造化されなかった。
集計するものでもなければ、とりあえずfmt.Printfで書いておけばそのまま確認できるのでOK。
Read more何もしないと、リクエストパラメータすらログに出力されないので、何かと不便。
ログの作成、表示、処理 | Google Cloud Functions に関するドキュメントによると、標準出力や標準エラーに書き込めば良いが、Entry構造体を定義して、Stringメソッドを作り、logにPrintlnで渡せばもっと良い感じにできるらしい。
とりあえず、fmt.PrintlnでJSONを出力するようにしてみる。
Read morerunnでDBの操作もできるのだけど、BINARY型のカラムがあるテーブルだとうまく動かない(気がする)。
深く考えずにCHAR型に変更したら通ったので、おそらくBINARY型が原因だったと思う。
時間ができたら検証してみたい。
runnのコマンドライン実行でうまく動かない件、オプション--grpc-no-tls
を指定したら解消した。
デバッグ用に詳細オプションないかなーってコマンドラインヘルプ見ていて見つけた。
マニュアルはちゃんと読みましょう(今年何度目かの反省
gRPCサーバーをテストするのに、fullstorydev/grpcurl: Like cURL, but for gRPC: Command-line tool for interacting with gRPC serversを使っていたのだけど、自動化するのに良いものはないかと探して、k1LoW/runn: runn is a package/tool for running operations following a scenario.を試してみた。
go testから使うのは何となくできたような気がするけど、runnコマンドで実行するのがうまくいかない。
go testから使うのもだいぶハマって、tls: false
を入れないとポート番号80以外で起動したときに常にTLS接続になって、応答がなくなってしまう。
SQLBoilerはDeleteするときに論理削除が使える。
詳細は【Go】sqlboilerで論理削除を実装する | ISSUEが詳しい。
論理削除のときはdeleted_at
カラムがセットされる。
で、そのときupdated_at
は更新されない。
論理削除した行を元に戻したいとき、deleted_at
にnull.Time{}
をセットしてupdateすれば元通りになるかというと、updated_at
が更新されてしまって完全に元通りとは言えない状態。
SQLBoilerを使うロジックをDATA-DOG/go-sqlmock: Sql mock driver for golang to test database interactionsでテストしようとしてハマった。
使わない便利機能は複雑さが増すだけで良いことないな。。
使いこなせば、それなしとか考えられないんだろうけど、つらい。
volatiletech/sqlboiler: Generate a Go ORM tailored to your database schema.を少し触ってみた。
普段はkyleconroy/sqlc: Generate type-safe code from SQLをよく使っているのだけれど、あらかじめSQLを書かなくて良いのは楽。
だけど結局DB操作するときには対象のレコードを指定するのに組み立てないといけないので、一長一短。
手段を一つしかもっていないと、それがダメになったときに詰んでしまうが、複数選択肢があれば柔軟に対応できるので、色々知っておくのは大事だと思う。
Read moreよくわからない。
ググるとhttptest使う例が良く出てくるけど、型が合わなくて組み立てられない。
仕方ないので、APIサーバー起動してhttp.NewRequestWithContextで叩いて結果を見るという、E2Eっぽいテストに落ち着きそう。