2013-03-27 3 views
4

다음은 메시지의 예 :Go에서 간단한 메시지를 어떻게 효율적이고 편리하게 파싱 할 수 있습니까?

User: tbone 
Location: /whatever 
Time: 23:23:23 

This is a little message. 

그것은 HTTP- 및 다른 프로토콜 틱의 일종 : 빈 줄 및 메시지 본문 뒤에 헤더.

이것을 파싱하는 가장 쉬운 방법은 무엇입니까? text/scanner 표준은 나에게 잘 어울립니다. 공백을 조금 더 잘 다룰 수 있다면 사용하기가 매우 쉽습니다. 즉, 헤더에서 콜론을 둘러싼 공백을 무시해야하지만 단어와 줄 바꿈 사이의 공백을 알려야합니다. 메시지 본문이 언제 시작되는지도 알아야합니다.

스캐너가 작업에 적합한 도구일까요? 더 나은 전략이 있습니까? 나는 한 번에 한 캐릭터 (또는 때때로 두 개)를 따라 행진하고 내 데이터 구조를 구축하는 내 자신의 작은 파서를 작성해야합니까? 그게 내가 피하고 싶은 불편이지만, 그렇게 할 수 있습니다.

그건 그렇고, 나는 메시지 형식을 제어한다. 작업을 단순화하는 더 나은 메시지 형식이 있습니까?

+0

시간대 정보를 추가 할 것입니다. 전역으로 이동해야하거나 통신하는 컴퓨터 중 하나가 시간대를 잘못 구성하여 잘못 작동하는 경우 목을 저장할 수 있습니다. 나는'time'] (http://golang.org/pkg/time/) 핵심 패키지에서'time.RFC3339'와 같은 완전한 datetime 문자열을 사용합니다. 이 패키지는 서식 지정 및 구문 분석에 모두 사용될 수 있습니다. – kostix

답변

5

텍스트/스캐너가이 형식을 사용하는 데 너무 많은 오버 헤드 (프로그래머 시간)가 될 것입니다.

net/http는 net/textproto을 사용하므로이 값을 사용할 수도 있습니다. MIMEHeader와 ReadMIMEHeader을 찾으십시오.

MIMEHeader가 포함 할 수있는 것보다 더 복잡한 것이 필요한 경우 JSON 만 사용하는 것이 좋습니다.

관련 문제