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. タイムアウトエラーに遭遇した場合は、ターミナルで以下のコマンドを実行し、次に再検査ボタンをクリックしてチェックを通過します。

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

おめでとうございます!あなたは無事に JSON コメント解析関数を実装し、テストを行いました。これで、あなたのプロジェクトでこの関数を使用できるようになりました。

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習してください。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習