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

Go言語でローカルからパッケージをインポートする方法

tadanori

Go言語でパッケージをローカルのフォルダのパッケージをインポートする場合に、毎回ハマるのでメモ書きです。

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

ここでは、モジュールの配下のディレクトリ(フォルダ)にあるパッケージのインポート方法について説明します。このパターンが一番多いと思います。

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

フォルダ構成

実験で作成したファイルとフォルダ構成は以下になります

  • モジュールのフォルダ直下に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 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のモジュール関連は、Goのバージョンが変わって何度か修正されています。以前のやり方がうまく動かないことがあるので、記事とバージョンが異なる場合は注意しましょう。

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

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

記事URLをコピーしました