Skip to content

Go

KindleのXMLをTSVに変換する

umemak/kindle_xml_to_tsv作った。

ExcelだとXMLファイル読めるらしい(試してない)けど、Googleスプレッドシートだと読み込めなかったので、TSVに変換して読み込めた。

goのencoding/xml使って、割と簡単に書けたけど、AuthorsとPublishersが配列になっているところ、structを作って配列にしても最後のものしか読み込まれず、タグをxml:"authors>author"みたいにしたら解決できた。

Read more

CloudFunctionsのログ

デプロイのエラーは、go clean -modcacheしてgo.sum削除してgo.modのrequire全削除してgo mod tidyしたら直った。 何が効いたのかはわからない。

ログは、JSON形式で出力しないといけないのかと思ってそのように書いてみたら、そのまま記録されて構造化されなかった。

集計するものでもなければ、とりあえずfmt.Printfで書いておけばそのまま確認できるのでOK。

Read more

CloudFunctionsのログ

何もしないと、リクエストパラメータすらログに出力されないので、何かと不便。

ログの作成、表示、処理  |  Google Cloud Functions に関するドキュメントによると、標準出力や標準エラーに書き込めば良いが、Entry構造体を定義して、Stringメソッドを作り、logにPrintlnで渡せばもっと良い感じにできるらしい。

とりあえず、fmt.PrintlnでJSONを出力するようにしてみる。

Read more

runnでgRPCのテスト3

runnでDBの操作もできるのだけど、BINARY型のカラムがあるテーブルだとうまく動かない(気がする)。

深く考えずにCHAR型に変更したら通ったので、おそらくBINARY型が原因だったと思う。

時間ができたら検証してみたい。

runnでgRPCのテスト2

runnのコマンドライン実行でうまく動かない件、オプション--grpc-no-tlsを指定したら解消した。

デバッグ用に詳細オプションないかなーってコマンドラインヘルプ見ていて見つけた。

マニュアルはちゃんと読みましょう(今年何度目かの反省

runnでgRPCのテスト

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接続になって、応答がなくなってしまう。

Read more

SQLBoilerで論理削除の復旧

SQLBoilerはDeleteするときに論理削除が使える。

詳細は【Go】sqlboilerで論理削除を実装する | ISSUEが詳しい。

論理削除のときはdeleted_atカラムがセットされる。

で、そのときupdated_atは更新されない。

論理削除した行を元に戻したいとき、deleted_atnull.Time{}をセットしてupdateすれば元通りになるかというと、updated_atが更新されてしまって完全に元通りとは言えない状態。

Read more

SQLBoiler

volatiletech/sqlboiler: Generate a Go ORM tailored to your database schema.を少し触ってみた。

普段はkyleconroy/sqlc: Generate type-safe code from SQLをよく使っているのだけれど、あらかじめSQLを書かなくて良いのは楽。

だけど結局DB操作するときには対象のレコードを指定するのに組み立てないといけないので、一長一短。

手段を一つしかもっていないと、それがダメになったときに詰んでしまうが、複数選択肢があれば柔軟に対応できるので、色々知っておくのは大事だと思う。

Read more

OpenAPIで生成したサーバーのテスト

よくわからない。

ググるとhttptest使う例が良く出てくるけど、型が合わなくて組み立てられない。

仕方ないので、APIサーバー起動してhttp.NewRequestWithContextで叩いて結果を見るという、E2Eっぽいテストに落ち着きそう。