チュートリアル: Goモジュールの作成

これは、Go言語のいくつかの基本的な機能を紹介するチュートリアルの最初の部分です。Goを始めたばかりの場合は、goコマンド、Goモジュール、および非常に単純なGoコードを紹介するチュートリアル: Goを始めようをご覧ください。

このチュートリアルでは、2つのモジュールを作成します。1つ目は、他のライブラリやアプリケーションによってインポートされることを目的としたライブラリです。2つ目は、1つ目を使用する呼び出し元アプリケーションです。

このチュートリアルのシーケンスには、言語のさまざまな部分を示す7つの短いトピックが含まれています。

  1. モジュールを作成する -- 別のモジュールから呼び出すことができる関数を持つ小さなモジュールを作成します。
  2. 別のモジュールからコードを呼び出す -- 新しいモジュールをインポートして使用します。
  3. エラーを返して処理する -- 簡単なエラー処理を追加します。
  4. ランダムな挨拶を返す -- スライス(Goの動的サイズ配列)でデータを処理します。
  5. 複数の人への挨拶を返す -- マップにキー/値ペアを保存します。
  6. テストを追加する -- Goの組み込みユニットテスト機能を使用してコードをテストします。
  7. アプリケーションをコンパイルしてインストールする -- コードをコンパイルしてローカルにインストールします。

前提条件

他の人が使用できるモジュールを開始する

まず、Goモジュールを作成します。モジュールでは、個別の便利な関数セットに対して、1つ以上の関連パッケージを収集します。たとえば、財務分析を行うための関数を持つパッケージを使用してモジュールを作成し、他の財務アプリケーションを作成する人があなたの作業を使用できるようにすることができます。モジュールの開発の詳細については、モジュールの開発と公開を参照してください。

Goコードはパッケージにグループ化され、パッケージはモジュールにグループ化されます。モジュールは、Goのバージョンや必要な他のモジュールのセットなど、コードを実行するために必要な依存関係を指定します。

モジュールに機能を追加または改善するときは、モジュールの新しいバージョンを公開します。モジュールの関数を呼び出すコードを作成する開発者は、モジュールの更新されたパッケージをインポートし、本番環境で使用する前に新しいバージョンでテストできます。

  1. コマンドプロンプトを開き、ホームディレクトリにcdします。

    LinuxまたはMacの場合

    cd
    

    Windowsの場合

    cd %HOMEPATH%
    
  2. Goモジュールソースコード用のgreetingsディレクトリを作成します。

    たとえば、ホームディレクトリから次のコマンドを使用します。

    mkdir greetings
    cd greetings
    
  3. go mod initコマンドを使用してモジュールを開始します。

    go mod initコマンドを実行し、モジュールパスを指定します。ここでは、example.com/greetingsを使用します。モジュールを公開する場合、これは、Goツールでモジュールをダウンロードできるパスである必要があります。それはあなたのコードのリポジトリになります。

    モジュールパスを使用したモジュールの命名の詳細については、依存関係の管理を参照してください。

    $ go mod init example.com/greetings
    go: creating new go.mod: module example.com/greetings
    

    go mod initコマンドは、コードの依存関係を追跡するためのgo.modファイルを作成します。今のところ、ファイルにはモジュールの名前と、コードがサポートするGoバージョンのみが含まれています。ただし、依存関係を追加すると、go.modファイルにはコードが依存するバージョンがリストされます。これにより、ビルドが再現可能になり、どのモジュールバージョンを使用するかを直接制御できます。

  4. テキストエディタで、コードを記述するファイルを作成し、greetings.goという名前を付けます。
  5. 次のコードをgreetings.goファイルに貼り付けて、ファイルを保存します。
    package greetings
    
    import "fmt"
    
    // Hello returns a greeting for the named person.
    func Hello(name string) string {
        // Return a greeting that embeds the name in a message.
        message := fmt.Sprintf("Hi, %v. Welcome!", name)
        return message
    }
    

    これは、モジュールの最初のコードです。呼び出し元に挨拶を返します。次のステップで、この関数を呼び出すコードを記述します。

    このコードでは、

    • 関連する関数を収集するために、greetingsパッケージを宣言します。
    • 挨拶を返すためのHello関数を実装します。

      この関数は、型がstringnameパラメーターを受け取ります。関数はstringも返します。Goでは、名前が大文字で始まる関数は、同じパッケージにない関数から呼び出すことができます。これは、Goではエクスポートされた名前として知られています。エクスポートされた名前の詳細については、Goツアーのエクスポートされた名前を参照してください。

    • 挨拶を保持するためのmessage変数を宣言します。

      Goでは、:=演算子は、1行で変数を宣言および初期化するためのショートカットです(Goは右側の値を使用して変数の型を決定します)。長々と記述すると、次のように書いた可能性があります。

      var message string
      message = fmt.Sprintf("Hi, %v. Welcome!", name)
      
    • fmtパッケージのSprintf関数を使用して、挨拶メッセージを作成します。最初の引数はフォーマット文字列であり、Sprintfnameパラメーターの値を%vフォーマット動詞に代入します。nameパラメーターの値を挿入すると、挨拶テキストが完成します。
    • フォーマットされた挨拶テキストを呼び出し元に返します。

次のステップで、別のモジュールからこの関数を呼び出します。