1

私は Go を学んでおり、Ragel と Go を使用して独自の HTTP 1.1 パーサーを実装するのは良い練習になると思いました。Mongrel2 のコード ベースを調べて、それがどのように行われているかを確認することをお勧めします。

Mongrel の HTTP パーサーのコードはここにありますが、実際の HTTP 処理を行っているように見える強調表示された関数http11_parser.cを理解するのが困難です。

私の質問は次のとおりです。

  1. 簡単に言えば、実装の背後にある基本的なアイデアは何ですか? コードは何をしますか?
  2. 慣用的な C のようなものがあると仮定すると、このコードはその良い例ですか? そうでない場合、これらすべての goto、ネストされた if およびスイッチの理由はありますか?

PS。Q2 に関しては、goto の使用について私が見つけた唯一の説明はhereです。C での私の経験は 0.5 (1 から 10 のスケールで) であることに注意してください。これは、このコードを理解するのが難しい理由を説明しています!

4

1 に答える 1