自作HTTPルーターから新しいServeMuxへ
2024年4月27日概要 これまでgoblinという自作HTTPルーターを自分のアプリケーションで使っていたが、Go1.22でServeMuxの機能が拡張されてからはServeMuxを使うようになった。 この記事では、Go1.22で追加されたServeMuxの機能や性能について整理し、これからのGoのHTTPルーター選定について考えてみる。 Go1.22で追加されたServeMuxの機能 Go1.22rcの公開時にS...
概要 これまでgoblinという自作HTTPルーターを自分のアプリケーションで使っていたが、Go1.22でServeMuxの機能が拡張されてからはServeMuxを使うようになった。 この記事では、Go1.22で追加されたServeMuxの機能や性能について整理し、これからのGoのHTTPルーター選定について考えてみる。 Go1.22で追加されたServeMuxの機能 Go1.22rcの公開時にS...
PHPCompatibilitiyを使ってPHP8.2の互換性チェックを行う際にハマったことのメモ。 ハマったこと 2023年10月現在、latestである9.3.5をインストールしてもPHP8.2の互換性チェックはできない。 9.3.5は2019年リリースで、最近のPHPのバージョンにまだ対応していないらしい・・・ 解決策 もしかして開発止まってる?と一瞬思ったが、その様子はない。 develo...
rune型とは int32のエイリアス型で、Unicodeのコードポイントを表す。 Unicodeは符号化文字集合や、文字符号化方式などを定めた文字コードの標準規格で、世界の多様な言語や書式、記号に番号を割り当てたもの。 符号化文字集合とは、コンピューター上で扱う文字や記号を重複しないように集めた文字セットのことであり、文字と文字に割り当てられた番号の対応表を指す。文字符号化方式は、文字に割り当て...
GoでHTTPサーバーを書いているときなどオレオレ証明書がほしいときに役立つワンライナー。 go run $(go env GOROOT)/src/crypto/tls/generate_cert.go -rsa-bits 2048 -host localhost cert.pemとkey.pemが用意できる。 openssl使ったりmkcert使ったりしていたけどGo使っていたらこれで良さそう...
指数バックオフ(Exponential backoff) リクエストの遅延を乗算的に増加させる(リトライ間隔を遅延させていく)形で失敗したリクエストを定期的に再試行(リトライ)する手法。 ex. 1回目のリトライは1秒後、2回目は2秒後、3回目は4秒後、4回目は8秒後... リトライ設計においては、バックオフのみに依存するのではなく、リトライ上限やタイムアウト(接続タイムアウトとリクエストタイムア...
この記事はMakuake Advent Calendar 2023の24日目の記事です。 概要 10年以上運用しているサービスのPHPとFuelPHPのアップデートを行ったプロジェクトのレポーティングをする。 アップデート対象 メインサービス(会社が運用する主要なサービス)のアプリケーション FuelPHP利用 メインサービスが利用している社内ライブラリ(2つ) PHP製 メインサービス...
この記事はMakuake Advent Calendar 2023の19日目の記事です。 なんでこんな大遅刻かというと、唯一埋まっていなかった19日の枠を急遽埋めようと思って投稿したため。元々掴んでいた枠ではないので遅刻ではない。 概要 去年くらいからGoのnet/httpに含まれるServeMuxの機能拡張の提案が出ていてウォッチしていたのだが、最近Closedになったらしい。 cf. net/...
概要 gRPCとProtocol Buffersについて改めておさらいしておきたかった。 リンク gRPC grpc.io 公式ドキュメント zenn.dev - 作ってわかる! はじめてのgRPC まだ読んだことなかったので読んでみたのだが大変勉強になった。日本語情報はまずこれ読んでみると良いかも。 www.wantedly.com - gRPC Internal - gRPC の設計...
OpenAPI Specificationとは 言語依存のない形でHTTP APIの仕様を定義するためのフォーマット。YAMLまたはJSONで記述する。 Swagger SpecificationはOpenAPI Specificationの前身である。 OpenAPIを採用するメリット・デメリット メリット REST APIの標準化されたフォーマットであり、開発者間のコミュニケーションコストを...
Go1.18から追加されたWorkspace modeを使ったことがなかったので、使ってみた。 Workspace modeとは Goのマルチモジュール構成を便利するための機能。 Workspace modeの使い方 次のような構成を用意する。 . ├── bar │ └── bar.go └── foo └── foo.go // foo.go package foo func ...