소개
이 프로젝트에서는 JSON 주석 인터프리터를 구현하는 방법을 배우게 됩니다. JSON 설정 파일을 다룰 때 이 기능은 유용합니다. 특정 설정의 배경을 설명하는 주석을 추가할 수 있기 때문입니다.
👀 미리보기
$ /usr/local/go/bin/go test
PASS
ok jsonex 0.002s
🎯 과제
이 프로젝트에서는 다음을 배우게 됩니다.
- Go 모듈을 초기화하고 필요한 환경을 설정하는 방법
#문자를 주석으로 지원하는 JSON 주석 파싱 함수를 구현하는 방법"문자가 문자열 내용의 일부인 경우를 처리하는 방법- JSON 주석 파싱 함수를 테스트하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다.
- Go 모듈을 사용하는 방법과 개발 환경을 설정하는 방법을 이해합니다.
- 주석을 지원하는 사용자 정의 JSON 파서를 구현합니다.
- JSON 주석 파싱 함수의 정확성을 보장하기 위해 테스트를 작성합니다.
- 새롭게 얻은 지식을 활용하여 JSON 기반 구성 파일에 유익한 주석을 추가합니다.
프로젝트 초기화
이 단계에서는 프로젝트를 초기화하고 필요한 환경을 설정하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요.
터미널을 열고
/home/labex/project디렉토리로 이동합니다.다음 명령을 사용하여 Go 모듈을 초기화합니다.
/usr/local/go/bin/go mod init jsonex다음 명령을 실행하여 필요한 패키지를 설치합니다.
/usr/local/go/bin/go get github.com/stretchr/testify/assert
JSON 주석 파싱 함수 구현
이 단계에서는 JSON 주석 파싱 함수를 구현하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요.
편집기에서
jsonex.go파일을 엽니다.Unmarshal함수는 JSON 인코딩된 데이터를 파싱하고 결과를 저장합니다.- JSON 에서
#을 주석 문자로 지원하며, 해당 문자 뒤의 모든 내용은 주석으로 간주해야 합니다. "가 문자열 내용의 일부인 경우\"로 표현되어야 하며,\는\\로 표현되어야 합니다.
- JSON 에서
라인이 주석인지 여부를 확인하는
trimCommentsLine함수를 구현합니다. 주석이 아닌 경우 라인 자체를 반환합니다.trimCommentsLine함수의 전체 코드는 다음과 같습니다.// trimCommentsLine check the line is comment or not, if not, return the line itself func trimCommentsLine(line []byte) []byte { var newLine []byte var i, quoteCount int lastIdx := len(line) - 1 for i = 0; i <= lastIdx; i++ { // if the char is '\' if line[i] == '\\' { // if the index is not the last index, check if the next char is '"' or '\', if so, append it if i != lastIdx && (line[i+1] == '\\' || line[i+1] == '"') { newLine = append(newLine, line[i], line[i+1]) i++ continue } } // if the char is '"', increase the quoteCount if line[i] == '"' { quoteCount++ } // if the char is '#' if line[i] == '#' { // if the quoteCount is even, break, because the '#' is not in the string, // is in the comment if quoteCount%2 == 0 { break } } newLine = append(newLine, line[i]) } return newLine }
JSON 주석 파싱 함수 테스트
이 단계에서는 JSON 주석 파싱 함수를 테스트하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요.
터미널을 열고
/home/labex/project디렉토리로 이동합니다.다음 명령을 실행하여 테스트를 실행합니다.
cd /home/labex/project /usr/local/go/bin/go test테스트가 통과하면 다음과 같은 출력을 보게 됩니다.
PASS ok jsonex 0.002s타임아웃 오류가 발생하면 터미널에서 다음 명령을 실행한 다음, 다시 검사 (re-inspect) 버튼을 클릭하여 검사를 통과하십시오.
cd /home/labex/project /usr/local/go/bin/go test
축하합니다! JSON 주석 파싱 함수를 성공적으로 구현하고 테스트했습니다. 이제 이 함수를 프로젝트에서 사용할 수 있습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



