呼び出したいモジュールを作成する

まずは利用するgreetingsモジュールを作成する。

go mod init example.com/greetings

上記を実行する。

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

というメッセ―ジとともに、go.modが作成される。

ちなみにコマンドに記入した`example.com‘はドメイン名ではGo ツールによってモジュールをダウンロードできるパスになるっぽいらしいけれど、よくわからない。

次に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
}

上記のように記入する。

これでパッケージは作成できた。

mainのパッケージを作成する

次にこれを呼び出していく。

先ほど作成したgreetingsモジュールが格納されているフォルダと同階層にhelloフォルダを作成する

<home>/
 |-- greetings/
 |-- hello/

今までの通りモジュールを作成する。

go mod init hello

ドメインは必須じゃないということだったので、省略してみたが、無事に作成することができた。

次に、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)
}

このコードではmainパッケージを宣言している。Goではアプリケーションとして実行されるコードはmainパッケージ内に存在する必要があるらしい。

以下、Chat-GPTのよると

Go言語における main パッケージは、実行可能なプログラムを定義する特別なパッケージです。

具体的には以下の特徴があります:

  1. エントリーポイント:
    • main パッケージ内の func main() が、プログラムのエントリーポイント(起動点)となります。この関数が最初に呼び出されます。
  2. 実行可能ファイルの生成:
    • main パッケージを含むプログラムは、go build コマンドを使って実行可能なバイナリファイルにコンパイルできます。
  3. 単独実行可能ファイル:
    • main パッケージを持つプログラムは、単体で実行可能なプログラムとして使われます。
  4. 必要なパッケージのインポート:
    • main パッケージは他のパッケージをインポートできます。これによって、他のパッケージの機能を利用することができます。
  5. mainパッケージ以外のパッケージには必要ない要素:
    • main パッケージ以外のパッケージは、エントリーポイントとなる func main() を持つ必要はありません。

例えば、以下は main パッケージの例です:

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

このプログラムは main パッケージであり、func main() 関数が定義されています。このプログラムは fmt パッケージをインポートし、コンソールに “Hello, World!” と出力します。

main パッケージを持つプログラムは、通常、Go言語で実行可能なプログラムとしてビルドされます。

関数の方ではexample.com/greetingsHello関数を呼び出し、使用している。

そのうえで、go mod tidyでモジュールを最新化する。

実際の運用ではリポジトリからモジュールを 公開しimportして使用するのだが、greetingsモジュールをまだ公開していないためexample.com/greetingsをローカルで見つかられるように調整する必要がある。

調整するためには下記のコマンドを叩く必要がある。

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

このコマンドでモジュール パス をローカルパスにリダイレクトするようにhelloモジュールが編集される。

次にgo mod tidyでモジュールを最新化する。

VSCodeでエラーが出ているけれど、実行すると

go run .
Hi, Gladys. Welcome!

無事に動いていることが確認できた。