JSON コメントインタプリタを実装する

GolangGolangBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、JSONコメントインタープリタを実装する方法を学びます。JSON構成ファイルを扱う際に便利な機能であり、特定の設定の理由を説明するためにコメントを追加できるようになります。

👀 プレビュー

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

🎯 タスク

このプロジェクトで学ぶことは以下の通りです。

  • Goモジュールを初期化し、必要な環境をセットアップする方法
  • # 文字をコメントとしてサポートするJSONコメント解析関数を実装する方法
  • " 文字が文字列コンテンツの一部である場合を処理する方法
  • JSONコメント解析関数をテストする方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • Goモジュールを使って開発環境をセットアップする方法を理解する
  • コメントをサポートするカスタムJSONパーサを実装する
  • JSONコメント解析関数の正しさを保証するためのテストを書く
  • 新しく学んだ知識を使って、情報豊かなコメント付きのJSONベースの構成ファイルを強化する

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/TestingandProfilingGroup(["Testing and Profiling"]) go(("Golang")) -.-> go/CommandLineandEnvironmentGroup(["Command Line and Environment"]) go(("Golang")) -.-> go/DataTypesandStructuresGroup(["Data Types and Structures"]) go(("Golang")) -.-> go/FunctionsandControlFlowGroup(["Functions and Control Flow"]) go(("Golang")) -.-> go/AdvancedTopicsGroup(["Advanced Topics"]) go/DataTypesandStructuresGroup -.-> go/strings("Strings") go/FunctionsandControlFlowGroup -.-> go/functions("Functions") go/AdvancedTopicsGroup -.-> go/json("JSON") go/TestingandProfilingGroup -.-> go/testing_and_benchmarking("Testing and Benchmarking") go/CommandLineandEnvironmentGroup -.-> go/command_line("Command Line") go/CommandLineandEnvironmentGroup -.-> go/environment_variables("Environment Variables") subgraph Lab Skills go/strings -.-> lab-301258{{"JSON コメントインタプリタを実装する"}} go/functions -.-> lab-301258{{"JSON コメントインタプリタを実装する"}} go/json -.-> lab-301258{{"JSON コメントインタプリタを実装する"}} go/testing_and_benchmarking -.-> lab-301258{{"JSON コメントインタプリタを実装する"}} go/command_line -.-> lab-301258{{"JSON コメントインタプリタを実装する"}} go/environment_variables -.-> lab-301258{{"JSON コメントインタプリタを実装する"}} end

プロジェクトの初期化

このステップでは、プロジェクトを初期化し、必要な環境をセットアップする方法を学びます。以下の手順に従ってこのステップを完了しましょう。

  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でさらに多くの実験を行って練習してください。