3
1

  【Golang】go mod を理解せず自作の package を動かす

Posted at

  【Golang】go mod を理解せず自作の package を動かす

概要

バージョンいくつかは知らんが、あるバージョンから go mod やらで既存の記述での自作 package が使えなくなってしまった。
go mod を理解して使おうという気は無いので、動けば OK 程度に既存の環境からの変更を記録する。

環境

PC:M1 Macbook Sonoma
Go

> go version
go version go1.21.6 darwin/arm64

既存環境(昔の記述:今これじゃ動かないよ(?))

ディレクトリ構造

> tree
.
├── main.go
└── testlib
    └── testfunc.go

2 directories, 2 files

ファイル記述

main.go
package main

import "./testlib"

func main() {
	println("hello from main func")
 	testlib.TestFunc()
}
testfunc.go
package testlib

func TestFunc() {
	println("Hello From TestLib")
}

動かしてみる(動かない)

> go run main.go
main.go:3:8: "./testlib" is relative, but relative import paths are not supported in module mode

更新手順

ディレクトリ位置(ホームまでは省略)

> pwd
~/work/forqiita

1. go mod init する

現在の作業ディレクトリが ~/work/forqiita なので以下のコマンドを実行する

go mod init forqiita

実行例

> go mod init forqiita
go: creating new go.mod: module forqiita
go: to add module requirements and sums:
	go mod tidy

go mod tidy しろという表示がでるが 無視する
実行後に go.mod ファイルが生成されていることがわかる

> tree .
.
├── go.mod
├── main.go
└── testlib
    └── testfunc.go

2 directories, 3 files
> cat go.mod
module forqiita

go 1.21.6

2. main.go を編集する

上記 main.go の 3 行目の自作パッケージの import を変更する。

- import "forqiita/testlib"
+ import "./testlib"

変更後

main.go
package main

import "forqiita/testlib"

func main() {
	println("hello from main func")
	testlib.TestFunc()
}

以降は普通に実行できる(はず)

> go run main.go
hello from main func
Hello From TestLib

他者の package を github 等から使いたいときはまたお作法が違いそうなので気をつけたい

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1