導入
こんにちは。Golangを学び始めて1ヶ月が経ち、ついにVSCodeでAPIサーバーを作ってみました。そこで、
BrokenImport
にとても苦しまされたのでその解決策を備忘録という形で残すことにしました。初投稿であり、読みにくいと感じられる点もあるかと思いますが、参考になれば幸いです。
問題
私のAPIサーバーのディレクトリは下のようになっていました。(一部略)api私は、internalフォルダ内にある、domainやrouterをcmdフォルダ内で呼び出そうとした際に
├ cmd/
│ └ go.sum
│ └ go.mod
│ └ main.go
├ internal
│ ├ domain
│ │ └ user.go
│ │ └ works.go
│ ├ router
│ │ └ router.go
:
├ go.mod
└ go.sum
BrokenImport
が表示され、エラーを吐きました。考えられる問題点として、赤字で示したようにプロジェクトディレクトリ下に複数の
go.mod
が存在していることが挙げられます。
解決策
それぞれのgo.mod
が存在するディレクトリが各々workspaceであることを示すためにgo.work
を作成します。私の場合、ターミナル内で以下のように実行しました。
go work init ./cmd ./internal
すると、以下のファイルがプロジェクトディレクトリに作られます。
go.work
go 1.22.4
use (
./cmd
./internal
)
work.go
を作成した後は、main.go
でinternalフォルダ内のものをcmdフォルダ内でうまく呼び出すことができました。
以上で終わりです。最後まで読んでくださり、ありがとうございました。
参考記事