Go言語入門:自作モジュールの利用

スポンサーリンク
Go言語入門:自作モジュールの利用 ノウハウ
Go言語入門:自作モジュールの利用
この記事は約7分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、Golangで作成した自作のパッケージを利用する方法についてご紹介します。

スポンサーリンク

前提条件

前回の記事では、greetingsモジュールを作成しました。
本記事では、greetingsモジュール内のHello関数を呼び出すコードを記述します。

そのため、下記の記事が実行できる環境にあることを前提にしていますので、参考にお願いします。

利用方法

作業ディレクトリを作成して、移動する。

mkdir 06_learn-golang-use-my-module
cd 06_learn-golang-use-my-module

asdfコマンドで使用するGolangのバージョンを指定します。

すでにGolangが実行できる状態にある方は、このコマンドをスキップしても問題ありません。

asdf local golang 1.20.5

前回作成したGoモジュールのgreetingsディレクトリをコピーします。

cp -r ../05_learn-golang-create-module/greetings .

Goモジュールのソースコード用にhelloディレクトリを作成します。ここに呼び出し元を書きます。

mkdir hello
cd hello

これから書くコードの依存性の追跡を有効にする。
コードの依存性追跡を有効にするには、go mod initコマンドを実行し、コードが属するモジュールの名前を指定します。

ここでは、モジュールのパスに example.com/hello を使用します。

go mod init example.com/hello

hello.goというファイルを用意します。

touch hello.go

以下のコードをhello.goファイルに貼り付け、ファイルを保存してください。

package main

import (
    "fmt"

    "example.com/greetings"
)

func main() {
    // Get a greeting message and print it.
    message := greetings.Hello("Gladys")
    fmt.Println(message)
}

example.com/helloモジュールを編集して、ローカルのexample.com/greetingsモジュールを使用するようにします。

実運用では、example.com/greetings モジュールをリポジトリに公開し(公開場所を反映したモジュールパスを指定)、Go ツールがそれを見つけてダウンロードできるようにします。今はまだモジュールを公開していないので、example.com/helloモジュールを適応させて、ローカルファイルシステム上のexample.com/greetingsコードを見つけることができるようにする必要があります。

そのためには、go mod editコマンドを使ってexample.com/helloモジュールを編集し、Go toolsをモジュールパス(モジュールがない場所)からローカルディレクトリ(モジュールがある場所)へリダイレクトします。

helloディレクトリのコマンドプロンプトから、以下のコマンドを実行します。

go mod edit -replace example.com/greetings=../greetings

このコマンドは、example.com/greetingsを、依存関係を見つける目的で./greetingsに置き換えるべきことを指定します。このコマンドを実行すると、helloディレクトリのgo.modファイルにはreplaceディレクティブが含まれるはずです。

module example.com/hello

go 1.20

replace example.com/greetings => ../greetings

helloディレクトリのコマンドプロンプトから、go mod tidyコマンドを実行してexample.com/helloモジュールの依存関係を同期させ、コードで必要だがまだモジュールで追跡されていないものを追加します。

go mod tidy

コマンドが完了すると、example.com/helloモジュールのgo.modファイルは次のようになるはずです。

module example.com/hello

go 1.20

replace example.com/greetings => ../greetings

require example.com/greetings v0.0.0-00010101000000-000000000000

このコマンドは、greetingsディレクトリにあるローカルコードを見つけ、example.com/helloがexample.com/greetingsを必要とすることを指定するrequireディレクティブを追加しました。この依存関係は、hello.goでgreetingsパッケージをインポートしたときに作成されました。

モジュールパスの後に続く数字は擬似バージョン番号で、意味的なバージョン番号(このモジュールにはまだありません)の代わりに使われる生成番号です。

helloディレクトリのコマンドプロンプトで、コードを実行し、動作を確認します。

go run .

次のように表示されるはずです。

% go run .
Hi, Gladys. Welcome!

解説

hello.go

package main

import (
    "fmt"

    "example.com/greetings"
)

func main() {
    // Get a greeting message and print it.
    message := greetings.Hello("Gladys")
    fmt.Println(message)
}

以下に各行の解説を示します。

1行目: main パッケージの宣言です。main パッケージは、Goの実行可能なプログラムのエントリーポイントとして機能します。

3行目と4行目: fmt パッケージと example.com/greetings パッケージをインポートしています。fmt パッケージは、フォーマットされたテキストの入出力を扱うために使用されます。example.com/greetings パッケージは、挨拶メッセージを生成するためのカスタムパッケージです。このパッケージは、プログラムの同じディレクトリ内またはGOPATHにある必要があります。

6行目から9行目: main 関数の定義です。この関数は、プログラムのエントリーポイントとして機能します。

11行目: greetings.Hello("Gladys") を呼び出して、Gladys という名前の人に対する挨拶メッセージを取得します。greetings パッケージの Hello 関数は、渡された名前を使用して挨拶メッセージを生成します。

12行目: 取得した挨拶メッセージを出力します。fmt.Println 関数を使用して、メッセージをコンソールに表示します。

このプログラムの実行結果は、Hi, Gladys. Welcome! がコンソールに表示されます。

おわりに

今日は、Golangで作成した自作モジュールを利用する方法についてご紹介しました。

本記事で使用したコードは下記のリポジトリにあります。

よっしー
よっしー

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました