はじめに
このプロジェクトでは、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タイムアウトエラーに遭遇した場合は、ターミナルで以下のコマンドを実行し、次に再検査ボタンをクリックしてチェックを通過します。
cd /home/labex/project /usr/local/go/bin/go test
おめでとうございます!あなたは無事に JSON コメント解析関数を実装し、テストを行いました。これで、あなたのプロジェクトでこの関数を使用できるようになりました。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習してください。



