JSON 주석 인터프리터 구현

GolangBeginner
지금 연습하기

소개

이 프로젝트에서는 JSON 주석 인터프리터를 구현하는 방법을 배우게 됩니다. JSON 설정 파일을 다룰 때 이 기능은 유용합니다. 특정 설정의 배경을 설명하는 주석을 추가할 수 있기 때문입니다.

👀 미리보기

$ /usr/local/go/bin/go test
PASS
ok      jsonex  0.002s

🎯 과제

이 프로젝트에서는 다음을 배우게 됩니다.

  • Go 모듈을 초기화하고 필요한 환경을 설정하는 방법
  • # 문자를 주석으로 지원하는 JSON 주석 파싱 함수를 구현하는 방법
  • " 문자가 문자열 내용의 일부인 경우를 처리하는 방법
  • JSON 주석 파싱 함수를 테스트하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다.

  • Go 모듈을 사용하는 방법과 개발 환경을 설정하는 방법을 이해합니다.
  • 주석을 지원하는 사용자 정의 JSON 파서를 구현합니다.
  • JSON 주석 파싱 함수의 정확성을 보장하기 위해 테스트를 작성합니다.
  • 새롭게 얻은 지식을 활용하여 JSON 기반 구성 파일에 유익한 주석을 추가합니다.

프로젝트 초기화

이 단계에서는 프로젝트를 초기화하고 필요한 환경을 설정하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요.

  1. 터미널을 열고 /home/labex/project 디렉토리로 이동합니다.

  2. 다음 명령을 사용하여 Go 모듈을 초기화합니다.

    /usr/local/go/bin/go mod init jsonex
    
  3. 다음 명령을 실행하여 필요한 패키지를 설치합니다.

    /usr/local/go/bin/go get github.com/stretchr/testify/assert
    

JSON 주석 파싱 함수 구현

이 단계에서는 JSON 주석 파싱 함수를 구현하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요.

  1. 편집기에서 jsonex.go 파일을 엽니다.

  2. Unmarshal 함수는 JSON 인코딩된 데이터를 파싱하고 결과를 저장합니다.

    • JSON 에서 #을 주석 문자로 지원하며, 해당 문자 뒤의 모든 내용은 주석으로 간주해야 합니다.
    • "가 문자열 내용의 일부인 경우 \"로 표현되어야 하며, \\\로 표현되어야 합니다.
  3. 라인이 주석인지 여부를 확인하는 trimCommentsLine 함수를 구현합니다. 주석이 아닌 경우 라인 자체를 반환합니다.

  4. 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 주석 파싱 함수를 테스트하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요.

  1. 터미널을 열고 /home/labex/project 디렉토리로 이동합니다.

  2. 다음 명령을 실행하여 테스트를 실행합니다.

    cd /home/labex/project
    /usr/local/go/bin/go test
    
  3. 테스트가 통과하면 다음과 같은 출력을 보게 됩니다.

    PASS
    ok      jsonex  0.002s
    
  4. 타임아웃 오류가 발생하면 터미널에서 다음 명령을 실행한 다음, 다시 검사 (re-inspect) 버튼을 클릭하여 검사를 통과하십시오.

    cd /home/labex/project
    /usr/local/go/bin/go test
    

축하합니다! JSON 주석 파싱 함수를 성공적으로 구현하고 테스트했습니다. 이제 이 함수를 프로젝트에서 사용할 수 있습니다.

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습