チュートリアル: Goモジュールを作成する

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

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

このチュートリアルの流れには、言語の異なる部分をそれぞれ説明する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関数を実装します。

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

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

      Goでは、:=演算子は、変数を1行で宣言および初期化するためのショートカットです(Goは右側の値を使用して変数の型を決定します)。長い方法では、次のように記述したかもしれません。

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

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