我正在学习 Go,我认为使用 Ragel 和 Go 实现我自己的 HTTP 1.1 解析器将是一个很好的练习。我认为查看 Mongrel2 的代码库以了解它是如何完成的将是一个好主意。
Mongrel 的 HTTP 解析器的代码在这里,我很难理解突出显示的函数http11_parser.c,它似乎在执行实际的 HTTP 处理。
我的问题如下:
- 简单来说,实现背后的基本思想是什么?代码有什么作用?
- 假设有像惯用 C 这样的东西,这段代码是一个很好的例子吗?如果不是,那么所有这些 goto、嵌套 if 和 switch 是否有原因?
PS。关于 Q2,我能找到的使用 goto 的唯一解释是这里。请注意,我对 C 的体验是 0.5(范围从 1 到 10),这解释了为什么我难以理解这段代码!