Go 言語でパッケージを自作して、それを呼び出してみる – その2
はじめに
前回のエントリでは greetings
というモジュール ( 正式名は genzouw/greetings
モジュール) を作成しました。
今回のエントリでは、別のモジュール ( アプリケーション) から前回作成した greetings
モジュール内にある Hello
関数を呼び出してみます。
ということで、もし前回のエントリ が見れていない場合は、一読することをお勧めします 。
コーディング開始!
それでは早速作成していきましょう。
1. ホームディレクトリ直下に hello
というディレクトリを作成
$ cd
$ mkdir hello
$ cd hello
ディレクトリを作成した後は、前回作成した greetings
ディレクトリと hello
ディレクトリは同じ階層に並ぶはずです。
<home>/
|-- greetings/
|-- hello/
2. モジュールフォルダを作成したら、いつものようにgo mod init
コマンドを実行
ここでもやはり、モジュール名は github のリポジトリ名をイメージして命名 しましょう。
$ go mod init genzouw/hello
go: creating new go.mod: module genzouw/hello
3. テキストエディタを開き、hello
ディレクトリの中に hello.go
というファイルを作成
もちろん好きなエディタで構いません 。
例
$ vi hello.go
4. Hello
関数の呼び出し、戻り値を標準出力に出力するソースコードをコーディング
package main
import (
"fmt"
"genzouw/greetings"
)
func main() {
// Get a greeting message and print it.
message := greetings.Hello("genzouw")
fmt.Println(message)
}
ソースコードについて簡単に解説します。
- Go 言語 では、実行可能なモジュール ( アプリケーションモジュール ) は
main
という名前のパッケージとします。 - 2 つのパッケージをインポートしています。
fmt
パッケージ- 中には入力情報と出力情報のテキストを色々な形に操作するための関数が含まれています。
genzouw/greetings
パッケージ- 中にある
Hello
関数を呼び出し、挨拶文を取得します。greetings
モジュールは前回のエントリで作成したモジュールですね。
5. genzouw/hello モジュールの設定を変更
Go 言語のモジュールは、多くの場合 Github リポジトリに公開することを想定していますgenzouw/hello
モジュールを import した場合も、 Github リポジトリから genzouw/greetings
モジュールを検索しようとします。
ただし、今回はちょっと状況が違います。
今回使用する genzouw/greetings
モジュールは Github リポジトリ上で公開されているわけではありません。
作成したばかりでネット上に公開されていない genzouw/hello
モジュールの置き場ば、自分の PC のファイルシステムです。
Github リポジトリにはなく、自分の PC 内にあることを何らかの形で教えてあげなければいけません。
これを行うために go mod edit
コマンドを使います。
自分のローカル PC のファイルシステム内を探すように指定します 。
$ go mod edit -replace=genzouw/greetings=../greetings
このコマンドによって genzouw/greetings
モジュールは ../greetings
ディレクトリに置かれていて、そこから取得するようになります。
コマンド実行後に genzouw/hello
モジュールディレクトリの go.mod
ファイルの中身を見てみましょう。replace
という単語から始まる命令が追加されています 。
module genzouw/hello
go 1.16
replace genzouw/greetings => ../greetings
go.mod
ファイルの設定変更が確認できたら 以前登場したgo mod tidy
というコマンドを実行します。
このコマンドを実行して初めて go.mod
ファイルへの変更は意味を持ちます。
$ go mod tidy
go: found genzouw/greetings in genzouw/greetings v0.0.0-00010101000000-000000000000
コマンド実行後、 go.mod
ファイルは以下のようになります。(一番下の行が追加されています。)
module genzouw/hello
go 1.16
replace genzouw/greetings => ../greetings
require genzouw/greetings v0.0.0-00010101000000-000000000000
go mod tidy
コマンドを実行することで、 genzouw/greetings
モジュールをローカル PC の ../greetings
ディレクトリから探し見つかった結果として go.mod
に一行追記しています。
モジュールのパスに続く謎の数値は、擬似的なバージョン値になっています。genzouw/greetings
モジュールが Github リポジトリから見つかった場合、タグの値などを使って以下のような行が追記されます。
require genzouw/greetings v1.1.0
ローカル PC 内のモジュールを利用する場合でも、 v1.1.0
に該当する記述が必要なので、go mod tidy
実行時にダミー値が設定される、という仕掛けのようです。
アプリケーション実行
それでは今回作成したアプリケーションモジュールを実行してみます。
こちらも何度も登場している、 main
パッケージ内の main
関数を呼び出すためのコマンドです。
( ファイル名を指定しても同じ結果になります。 )
$ go run .
Hi, genzouw. Welcome!
おめでとうございます!
これでついに、 「自作モジュールの作成」 と 「自作モジュールを利用するアプリケーションモジュール」 のコーディングができるようになりました。
ひとこと
次回は エラーハンドリング について学習していきます!
ディスカッション
コメント一覧
まだ、コメントがありません