上位互換であるが多機能すぎるかもあたりになります。typingの典型例で、明示的にimplementsなどでinterfaceを指定しなくても、規定のメソッドをstructに生やせばinterfaceとして成り立つようになっています。そこで問題になっているのが、「このstructはどのinterfaceを実装しているのか?」「逆にinterfaceを実装しているstructはどれか?」というところです。これに対してエディタでの解決策としては、GoLandだとアイコンを視認・クリックですぐにわかります。VSCodeだとコマンドパレット経由でチェックできたりしますが視認はできず...ここは詳しくないので良いPluginがあるかもわからないです。valueを定義して割当してみる方法があります。I.これを書いておくと、後からの変更でインタフェース定義から外れた場合はコンパイルエラーになります。引数回しする、が良いかと思います。request-scopedに絞ったもののみを要素として与えるのが鉄則のようですが、Webサービスの場合はいろんなところで同じ参照先のものをサクッと取得したい場合にどんどん使っちゃってよいかと思います。パッケージ構成どんな感じにするがよい?いろいろ流儀があり定まっていない印象です。最近になって公式で「こんな感じかな」ってのを出しました。cmdをエントリーポイントにするって形が提案されています。go.modで依存してもインポートできないのですが、プライベートリポジトリが主流の社内リポジトリでインポートされる可能性が低ければあまり気にしなくても良いかなと思われます。Layoutこちらは非公式で、Goチームの方もはっきりstandardでないと言及しています。いうのがあるようですが国内の例は出てこずです。「HTTPで喋る・いい感じにルーティングするためのもの」という狭い意味でのフレームワークとして考えます。gorilla/muxあたりが挙げられます。改善される見込みで近いうちに状況が変わるかもしれません。Frameworkchiあたりをよく聞きます。活用しており、個人的に新規で開発する場合はこれにしたいなーと思うことはあります。graph-gophers/dataloaderがデファクトスタンダードな印象です。dataloaderはv7のgeneric版を使いましょう。RESTとGraphQLを混在させる必要がある場合、Echo/Ginは使わずchiにしたほうが良さそうです(未検証ですのでやや推測)。扱いがややこしくなってしまっています。chiだとスマートになるはず。SQLは?ORMは何使えば?SQLを扱うデータベースの接続について。これもこれさえ使えばってのはなく、よりどりみどりです。人気ながらも使用感は......セキュリティの懸念や互換性もあやしいことが多い。ゼロからつくるならよいが途中から差し込むのは大変そう。生成されたコードもシンプルでブラックボックスがほぼない。動的なクエリが書けない・エラーハンドリングなどカスタマイズがしにくいという欠点もあり。SNSでたまにきく、玄人向けらしいまたこれに加えて、DBのドライバが必要です。PostgreSQLの場合、lib/pqjackc/pgxの2つがありますが、前者はメンテが止まっているので後者がよさそうです。活用するものであればORMの併用もがんばれば可能です。Loggerは?JSONを吐き出すような、いわゆる構造化ログに限定して話すと、log/slogrs/zerologuber-go/zapあたりが上がります。Go1.21で出てきたばかりの標準パッケージで注目されています。リッチな機能がいらないならこれでよさそうです。Testingがスタンダードなテストの書き方だ、とよく言われてます。Testと呼ばれるようなものには良いのですが、「テストごとに入力値以外の前提条件が大きく異なる」場合はTable-Drivenだとかなり辛い印象です。サブテスト実行するような形が主でもよいかなと思ってます。使われている印象です。ほうで現在はメンテされているようです。個人的にはmatryer/moqの使用感がよくてオススメです。その使用感の話は記事にしているので参照ください。moqを使ったGoのテストLinterは何を設定すれば?いくつかありますが、ゼロコンフィグ状態でもちょうどいい感じの設定がされてて、ややデファクトっぽくなってきているStaticcheckがとりあえず良さそうです。いろんなLinterをかけあわせて使えるgolangci-lintというのも人気ですが、ごちゃ混ぜ感もありデフォルト設定や全部enableにすると辛いことになる感じなので、必要なものだけに絞って有効にするのがよさそうです。vetは必ず通るようにしておくと安心です。Packagesのほうがおすすめです。import文の間に空行が入ったり入らなかったりという問題があり、まだ改善の余地が見受けられるというのが正直なところです。毎週GoチームとしてどのProposalを採用したか、不採用としたかがまとめて送られる。他各企業のGo主体のカンファレンス↑でよく話してる方のSNSおわりにざっくばらんな内容になりましたが、思いつくだけのプラクティスを書いてみました。勉強会などで他の会社のGoユーザーと話してみても、ベストプラクティスはまだまだ固まっておらず模索してたり、同じようなところで悩んでいる印象でした。ここに書いた内容も勿論2023年現在のスナップショットで、現時点でもユニークで前進的なものもあればあまりベストとは言えないものもあるかもしれません。引き続き様々な情報キャッチアップ・発信を続けていけたらと思います。