プログラミング
記事内に商品プロモーションを含む場合があります

Go言語でフォルダ内のローカルパッケージをインポートする手順を解説

Aru

Go言語でプログラムを作成しているとき、とりあえず一部をパッケージ化してインポートしたい場合があります。この記事では、サブフォルダ(ディレクトリ)内のパッケージをインポートする手順について解説します。Go言語に慣れていないと結構ハマるポイントなので参考になれば幸いです。

サブディレクトリのパッケージをインポートする

この記事では、モジュールの配下のディレクトリ(サブフォルダ)に存在するパッケージをインポートする手順について解説します。

gitなどの構成管理ツールを使用せずに、Go言語でプログラミングを書いていると、こういった部分でよくトラブります。

やり方さえ知っていれば難しくないのですが、初めての場合結構ハマる部分だと思います。

この記事の内容は、Go 1.21で確認しています

Go言語を使い始めた当初、サブフォルダにあるパッケージのインポートでかなり悩みました。バージョンが変わって簡単になっていますが、それでも初心者がハマるポイントだと思います。

この記事では、インポート用のサンプルコードを作りながら、基本的な手順について解説します。

フォルダ構成

サンプル用に作成したファイルとフォルダ構成は以下になります

  • モジュールのフォルダ直下にmain.go(mainパッケージ)を配置
  • calcフォルダにcalcパッケージを配置
  • go.modはgo mod initで生成
.
├── calc
│   └── calc.go
├── go.mod
└── main.go

それぞれのファイルの内容

main.go

mainパッケージです。calcパッケージのAddを呼び出しています。

モジュール配下のパッケージを読み込む場合は、import "<モジュール名>/<パッケージ名>"で読み込むことができます(パッケージが複数階層になっている場合もOK)。

package main

import (
	"fmt"
	"sample/calc"
)

func main() {
	fmt.Println("x", calc.Add(10, 20))
}

calc/calc.go

calcパッケージです。Go言語の命名ルールとして、外部から参照する関数は大文字から始めることを忘れないようにします(AddAが大文字になっていることに注意)

package calc

func Add(a, b int) int {
	return a + b
}

パッケージ外から参照される関数の名前は大文字から始めなければならないことは忘れがちです。小文字だと外部からはアクセスできないので注意

ファイルを作成した状態で、ルートフォルダでgo run main.goとしてプログラムを実行しようとすると、以下のようなメッセージが出力されてエラーが発生するはずです。

main.go:5:2: package sample/calc is not in std

sample/calcが見つからないのでエラーとなっていることがわかります。これを解決するために、.modファイルを作成します

go mod を使う

ここからの手順が重要です。

以下のコマンドでgo.modファイルを生成します

go mod init sample

sampleの部分は「モジュール名」です。githubで管理している場合は、/github/<ユーザ名>/<リポジトリ名>の形式になりますが、ローカルのみの場合はなんでもOKです。

module sample

go 1.21.5

モジュール配下のパッケージを参照する場合は、go.modになにも追加する必要はありません。

今回の記事を書いている時に、結構エラーが発生しました。理由は不明です・・・

うまくいかない場合は、手順を変えてみてください。今回は、main.go, calc.goを作成した後、go mod initの手順でうまくいきました。

go.modファイルができた状態でgo run main.goを実行すると、パッケージをインポートして実行できるはずです。

まとめ

Goのモジュール関連は、Goのバージョンが変わって何度か修正されています。以前のやり方がうまく動かないことがあるので、記事とバージョンが異なる場合は注意しましょう。

この記事の内容は、Go 1.21で確認しています

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました