英文:
How can I efficiently and conveniently parse a simple message in Go?
问题
这是一个消息的示例:
用户:tbone
位置:/whatever
时间:23:23:23
这是一条小消息。
它有点类似于HTTP和其他协议:首部后面是一个空行和消息体。
解析这个消息的最简单高效的方法是什么?标准的text/scanner对我来说看起来不错。如果我能更好地处理空白字符就更好了。在首部中,它应该忽略冒号周围的空白字符,但要让我知道单词之间和换行之间的空格。我还需要知道消息体何时开始。
扫描器是否是完成这个任务的正确工具?是否有更好的策略?我是否应该编写自己的小解析器,逐个字符(或有时两个字符)地构建我的数据结构?那是我想要避免的不便,但我可以这样做。
顺便说一下,我控制消息格式。是否有更好的消息格式可以简化任务?
英文:
Here's an example of a message:
User: tbone
Location: /whatever
Time: 23:23:23
This is a little message.
It's sort of HTTP- and other protocols-ish: headers followed by a blank line and the message body.
What's the easiest pretty efficient way to parse this? The standard text/scanner looks good to me. It would be very easy for me to use if I could deal with whitespace a little better. Namely, in the headers, it should ignore whitespace surrounding a colon, but let me know about spaces between words and newlines. I also need to know when the message body starts.
Might a scanner be the right tool for the job? Is there a better strategy? Should I just write my own little parser that marches along a character (or sometimes two) at a time and builds up my data structure? That's the kind of inconvenience I'd like to avoid, but I could do that.
By the way, I control the message format. Is there a better message format that would simplify the task?
答案1
得分: 5
text/scanner对于这么简单的格式来说,开销太大(在程序员时间上)。
net/http使用net/textproto,你可能也可以使用它。查找MIMEHeader和ReadMIMEHeader。
如果你需要比MIMEHeader更复杂的内容,我会考虑使用JSON。
英文:
text/scanner would be way too much overhead (in programmer time) to use for a format this simple.
net/http uses net/textproto, you might be able to use that too. Look for MIMEHeader and ReadMIMEHeader.
If you need something more complicated than what MIMEHeader can contain, I'd consider just using JSON.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论