Category:

go クリーンアーキテクチャでトランザクション管理

意外に情報が少なくて、何がベストかはよく分からないですが、メモがてら残しておきます。 ソースコードは以下で公開してるので、詳細を見たい場合は参照ください。 https://github.com/rinoguchi/microblog 利用している技術 言語: golang web framework: chi ORM: bun トランザクションの開始/終了 通常の Web APIでは1リクエスト1トランザクションが一番シンプルで分かりやすいので、リクエストとトランザクションのライフサイクルは同じにしたいです。 一つのAPIコールの途中で何かエラーが発生したら、全部ロールバックする形です。 この場合、controllers 層でトランザクションを開始/終了するのが良さそうです。 controllers 層の各ハンドラーにて、以下のような感じで実装するのが一番シンプルですが、同じ実装が何度も出 Continue Reading

Posted On :
Category:

go generateの使い方

go generate の使い方をメモ程度に残しておきます。 既存のRepositoryモデルを元に、RepositoryモデルをDomainモデルに変換するマッパーを生成するようなケースを紹介します。 フォルダ構成 ├── domains │ └── model.go # Domainモデル └── repositories ├── gen │ ├── gen.go # generator本体 │ └── mapper.tmpl # 参照するテンプレート ├── model.go # 参照するRepositoryモデル └── mapper.gen.go # 自動生成されたマッパー genフォルダ配下にgenerator本体を置くのは、go generate のベストプラクティス を参考にさせていただきました。 参照元のコード Repositoryモデル 今回はbunを使ってます。 im Continue Reading

Posted On :
Category:

Go+chi+GAEでクリーンアーキテクチャを試してみた

ちょうど、このブログとは別に自分用のマイクロブログを作りたいと思っていたので、Go+chi+GAEでクリーンアーキテクチャを試してみました。 この記事では、バックエンド(APIサーバ)部分について記載していきます。ソースコードも公開してますので、細かいところは直接参照ください。 https://github.com/rinoguchi/microblog 使う技術 バックエンドAPIサーバ 言語: Go 経験少なめなので慣れておきたい Webフレームワーク: chi DIツール: wire 実行環境: GAE(Google App Engine) Goが使える 1日あたり 28 インスタンス時間の無料枠がある Dockerイメージすら作らずに、アプリをデプロイ+公開できる データベース: supabase 500MBまで無料!個人利用なら十分 ※料金体系 中身は慣れ親しんだPostgreS Continue Reading

Posted On :
Category:

Goでwireを使って依存性注入(DI)する

Go では依存性注入(DI)のためのコードを自動生成するツールである wire が良く利用されるようでので、早速導入したいと思います。 チュートリアルを自分が今作っているマイクロブログに当てはめただけです。 DI導入前 導入前は以下のように、自前でインスタンスを生成して引数として渡していました。 func InitializeServer() *controllers.Server { commentRepository := repositories.NewCommentRepositoryImpl() commentUsecase := usecases.NewCommentUsecase(commentRepository) server := controllers.NewServer(commentUsecase) return server } これはこれでシンプルなのですが、 Continue Reading

Posted On :
Category:

oapi-codegenでchi用APIインターフェースを自動生成

Goでマイクロブログを作成中なのですが、OpenAPIで定義したAPIスキーマからoapi-codegenを使ってchi用APIインターフェースを自動出力することにしました。 使うモジュールは以下の二つです。 oapi-codegen v1.11.0 chi v5.0.7 APIスキーマ定義 まずはAPIスキーマをyaml定義します。 VS CodeでOpen API(Swagger) Editorという拡張を入れて編集すると便利です。 以下の二つのAPIの定義を書いてます。 post /comments コメントを新規作成する get /comments コメントを全件取得する api-schema.yamlというyamlファイルを作成しました。 難しい内容ではないので、説明は割愛します。 openapi: "3.0.0" info: version: 1.0.0 t Continue Reading

Posted On :
Category:

Goのお勉強(環境構築+Tour of Go)

バックエンドのプログラミング言語として、Go言語は今後も含めてはやり続ける印象を持っているのですが、自分自身は以前少しだけ業務で触ったことがあるだけでほとんど経験がないので、Tour of Goをやってみることにしました。 Go言語を書く人をGopherというらしいので、Gopherを名乗れるように頑張っていこうと思います。 実際にやってみたソースコードは、GitHubで公開してます。 https://github.com/rinoguchi/go_toor Goのインストール こちらからダウンロードする方法もあるのですが、複数のプロジェクトで異なるバージョンを使い分けたりすることも考えると、Go自体のバージョン管理を簡単にできる方が良さそうです。 pyenvやnvmのGo版ともいうべきgoenvというものがあるのでそちらでインストールして行きます。このへんを見ながらやってみようと思います Continue Reading

Posted On :