呼び出したいモジュールを作成する
まずは利用する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
パッケージは、実行可能なプログラムを定義する特別なパッケージです。
具体的には以下の特徴があります:
- エントリーポイント:
main
パッケージ内のfunc main()
が、プログラムのエントリーポイント(起動点)となります。この関数が最初に呼び出されます。
- 実行可能ファイルの生成:
main
パッケージを含むプログラムは、go build
コマンドを使って実行可能なバイナリファイルにコンパイルできます。
- 単独実行可能ファイル:
main
パッケージを持つプログラムは、単体で実行可能なプログラムとして使われます。
- 必要なパッケージのインポート:
main
パッケージは他のパッケージをインポートできます。これによって、他のパッケージの機能を利用することができます。
- 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/greetings
のHello
関数を呼び出し、使用している。
そのうえで、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!
無事に動いていることが確認できた。