Go言語で外部パッケージの関数を呼び出す

他のエンジニアが作られた関数を外部パッケージとして読み込み、自分のコードから呼び出す

前回の続きからの内容となります。ぜひ前回学習した内容を一読しておいてください!

今回は "Hello world" と表示していた挨拶文を、別の関数 ( 外部パッケージの関数 ) を使って生成させてみたいと思います。

  1. [pkg.go.dev] ( https://pkg.go.dev/ ) というサイトを開き "quote" というモジュールを検索 します。
  2. 検索結果から rsc.io/quote というモジュールを探してクリックします ( rsc.io/quote/vN のように名前の後方にバージョンが付与されているかもしれません )。
  3. Documentation セクションを探しましょう。
    • ここに "quote" モジュールに含まれている関数が一覧表示されているはずです。
    • 書かれている関数は、このパッケージが提供されてしているものです。自分のコードから呼び出すことが可能です。
  4. ページの一番上には rsc.io/quote というモジュールの中に "quote" パッケージが含まれていると書かれています。
    • 2022-03-27 現在、 英文で "Package quote collects pithy sayings." と書かれていました。

pkg.go.dev サイトでは多くのモジュールが公開されています。
モジュールで提供されている関数は、自分のコードから自由に呼び出すことができます。

時間と共に新しいバージョンが公開されていきます。

go コマンドを使ってアップグレードに追従することが可能です。

前回作成したコードから rsc.io/quote パッケージをインポートして関数を呼び出してみる

以下のようにパッケージのインポートと関数の呼び出し処理を追記します。

package main

import "fmt"

import "rsc.io/quote"

func main() {
    fmt.Println(quote.Go())
}

新しく追加したモジュールを要求する

依存ライブラリのリストに rsc.io/quote モジュールを追加します。
依存ライブラリを管理している設定ファイルは、前回作成した go.mod ファイルとなります。
PHPRuby といった他言語のライブラリ管理ツール ( Composer / Gem ) とは異なり、設定ファイルに自分で追記する必要はありません。

以下のコマンドを実行する事で go.mod ファイルに、ソースコードでインポートしているパッケージを自動で探し出し、追記する仕組みになっているようです。とても便利!

$ go mod tidy
go: finding module for package rsc.io/quote
go: downloading rsc.io/quote v1.5.2
go: found rsc.io/quote in rsc.io/quote v1.5.2
go: downloading rsc.io/sampler v1.3.0
go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c

ちなみにインポートしているモジュールがダウンロードされるタイミングは、メッセージからもわかると思いますが go mod tidy コマンド実行したタイミングです。

go.mod ファイルを見ると、一行追記されていました。

$ cat go.mod
module genzouw/hello

go 1.16

require rsc.io/quote v1.5.2

モジュールがどこのフォルダに配置されたかは現時点では僕も把握していないので、また学習を進めていって分かったら紹介します。

実行し、外部モジュールによってメッセージが生成されていることを確認

前回と同様に実行コマンドを入力します。

$ go run .
Don't communicate by sharing memory, share memory by communicating.

これで、本当に基本的なコーディングはできるようになりました!

Go 言語 のシンタックスはまだ把握していませんが外部モジュールを使ったかんたんな処理ならコーディングできそうな気がします。

次回は Go のモジュールを自作する というチュートリアルを進めていきます。

Posted by genzouw