日記マン

動画広告プロダクトしてます。Go, Kubernetesが好きです。

Go

error型の階層情報を失わずにjsonシリアライズ・デシリアライズする

Go

Goの error 型を json シリアライズ・デシリアライズ したいときのシリアライズ化条件と階層情報の失わないように拡張する話。

GoはネットワークI/Oをどう実現しているか

Go

goroutine自体はOSスレッドに多重化してスケジュールされる。 ランタイムでは goroutine関数をG、OSスレッドをM、GをMに割り当てるスケジューラをP、と名称し実装されている。 qiita.com ではG全てがI/O実行を行いブロック状態になった場合、Gに紐づかれたM…

Goのサーバサイドアプリケーションのパフォーマンス可視化に向けたメトリクス設計

Go

最近はGoで書いたアプリケーションをKubernetesで運用し始めたが、 アプリケーションの内部状態を計測できるようにObservabilityの確保にトライしている。 「Observabilityがなぜ必要だと考えるか」について山口さんのエントリはとても学びになった。 ymoton…

GoにおけるDBクライアントの設計とObservabilityの確保

Go

Goで sql.DB を扱ってMySQLを扱うとき、 インターフェイスの実装、チューニングできる設定値への理解、Observabilityをどのように確保すればよいか。 ある程度知識がまとまってきたのでアウトプットする。 (実際は sql.DB にない構造体バインディングが欲し…

Goでプログラムを正常に終了する

Go

CNCF系のOSSをコードリーディングしていると、(KubernetesとかPrometheusとかLokiとか) Go言語の模範的な書き方を学ぶことができて有意義だったりする。 今回は読んでてためになったリファレンスな記述の1つとして、 OSシグナル(ctrl-C)などを受け取ったと…

HTTPリクエスト・レスポンスレベルのテストユーティリティ

Go

JSON/XML 構造データのアサーション HTTPのAPIは多くの場合、JSONやXMLのフォーマットでレスポンスする。 実際にHTTPリクエストを投げて、期待するレスポンスを検証する際に、 ツリー構造であるJSONやXMLに対し特定のフィールドのみ一致するかを検証したい場…

GoのコードからPlantUMLコードを生成する静的解析ツールを作っている

Go

tl;dr go/types パッケージがめちゃくちゃ便利 https://golang.org/pkg/go/types/ https://github.com/golang/example/tree/master/gotypes gouml の紹介 Goのコードを静的解析し、PlantUMLのコードを吐くパーサを開発している。 github.com

Go言語による「ネット広告」ビジネスに対するドメイン駆動設計の具体例

ネットに転がっているドメインモデリングの実例は少ない。 というのも、その性質上、扱うドメインに対し答えがバラバラで一般化できるものではないから。 というかそもそも外部公開できないような、競合と差別化要因となるロジックだったりするから。 だから…

Goにおけるドメインオブジェクト設計の考察

仕事で、PHPで書かれた硬直したWebサーバシステムを、Go言語でリプレイスしています。 Go言語本来のらしさを壊さず、ドメイン駆動のオブジェクトパラダイムを導入する際の、 自分なりの設計方針を公開して、オープンに意見交換などができればと思いブログに…

Go言語の例外を必ず扱うような言語機能のありがたさ

Go

僕はGo言語が好きだ。そのGoがもたらす恩恵のひとつとして、例外周りのセマンティクスがある。 Goでは例外はerrorという型の値に抽象化され関数の返り値として記述することが多いというのはご存知だと思う。 func GetUser(id int) (*User, error) { // do so…