今回はPerlの軽量ORMである「Teng」をGolangで同じように使いたく自作しようとした話になります。本記事はPerl/Golangのいずれかを持ち上げる/持ち下げる目的の記事でないことを予めお断りしておきます。業務とは関係ありません。初投稿故、誤字/脱字/知識不足を暖かく見守っていただけると幸いです。知識不足の祭は指摘していただけると嬉しいです。TengとはPerlでの軽量のORMです。次のように書けるわけです(一部簡略化してます)。1簡単なクエリなら簡潔な表現で記述できるのでそういったクエリを叩きたいときには使いやすいです。直接クエリを書いて叩くことも出来ます。1");初めて使ったときの僕は「GolangでもTengみたいにクエリ書けたら最強じゃん」みたいな短絡的な思考をしていました(呆れ)。ちなみにこの時点でもGo言語には「gorm」や「sqlx」など使いやすくORMが色々あるので「あまり作るメリットは実務的にはないのでは?」という感じです。先にどういうものが出来上がってしまったのかを紹介します(簡略化して書いてるので汲んでもらえると幸いです)。225;オレオレ感あるものが出来てしまった...。ちなみにGolangで自分がよく見るクエリジェネレーターとしてはこういうやつだと思います。改行を怠らなければこっちのほうが分かりやすいですね。作るに当たってしんどかったなぁという点を紹介します。圧倒的にしんどい箇所としては「型」です。MySQLの型からGolangの型に変換しなければなりません。Perlでは基本的にはスカラ・ハッシュ・配列を抑えておけばなんとかなりますので例えば次のように書けました。「数値」と「文字列」ではありますがPerl的にはそんなもん関係ありません。なっていることで1つの引数でもスライスでも受け取ってそこからクエリを作ろうという目論見でした。いう構造体を挟まないといけないのでいまいちしっくりこない感じですね...。}).SQL()理想としてはやはりこんな感じでしょうか(処理がとてつもなく面倒くさそう)。}).SQL()ゼロ値処理ここはGolangのなかなかしんどい箇所だと思います。falseなどはゼロ値として処理される悲しい運命が有ります。時に要素そのものが消滅します。使えと推奨される感じです。複雑になるとしんどいここまでのやつでは全てこんな感じのコードでした。単純なクエリばかり紹介してきました。みたいに書きたくなったらどうするんだという話ですね...。/だんだん無茶苦茶感出てきてしまいました...。言ったクサいものが出現してきてしまいました。十分に使えない結構ヤバいポイントかもしれません。"nakai")のようなクエリはまだ書けない状態です。後先考えずにこういう実装をしてしまったことが原因です。「s」ができないわけですね...。いう細かいところはまだまだ改善点だと思います。「ごにょごにょ」を書けるようにする必要がある。以下の部分と同じだし案外何とかなると思っている)と言ったところでしょうか。全てを自作ジェネレーターで賄うにはまだまだ時間がかかりそうです...。関わっている方すごい。落ち着けば仮完成させて放出してみたい(謎の自信)。upLoginユーザーは見つかりませんでした。