1754590917
2025-08-07 18:05:00
GOは、シンプルさ、速度、使いやすさで評判があります。そして、ほとんどの場合、それは配信されます。しかし、ここに不快な真実があります。学習が容易になるのと同じシンプルさは、特に大規模な建築のtrapにあなたを誘惑する可能性もあります。
10サービスを実行しているときは?これらのパターンは無害かもしれません。数十億のリクエストを処理するマイクロサービス全体で1秒あたり1000ゴルチンを実行しているとき?彼らはあなたのパフォーマンス、観察、保守性を静かに殺します。
長年にわたって生産中のGOシステムをスケーリングした後、ここにあります トップ10アンチパターン 私が見た – それはそうです 開発者は元気に見えます しかし 現実世界の高負荷環境で崩壊します。
go doSomething() // No cancelation, no tracking, no error handling
無邪気に見えます。しかし、それに何百万ものリクエストを掛けると、最終的には孤立したゴルチンが記憶とCPUを食べることになります。内部ループまたはHTTPハンドラーを産んだ場合、特に危険です。
修理:コンテキストとウェイトグループを使用します。常にクリーンアップしてください。
for i := 0; i f, _ := os.Open("file.txt")
defer f.Close() // BAD
}
これはすぐにファイルを閉じません。関数の終わりまでそれらをすべて定ルします。大規模に、これはファイル記述子リークまたはメモリ時限爆弾になります。
修理: 電話 f.Close() 通過するのではなく、ループの内側に明示的に defer。
val, err := doThing()
if err != nil {
// just log and move on
}
大規模に、静かに失敗する カスケード障害。 1つの悪い入力は、停止または再試行しなかったため、システムを介してゴミを伝播し始めます。
修理:ハンドル、伝播、またはログエラー 有意義に。そして、治療をやめてください log.Println(err) エラー処理として。
var client = &http.Client{} // shared across services
#トップ10 #Scaleで壊れるアンチパターン #theoptimizationking #2025年8月