4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Golang】go.mod file not found in current directory or any parent directory.の対処法

Posted at

はじめに

最近Golangの学習を始めました。ざっとA Tour of Goを一通りやったので、実際に何かを書いてみようと思い、Go+Gin+Gorm+Mysql+Docker+Nginxで簡単なAPIを作成しようとしていました。そんな時に下記のようなエラーに遭遇したので、備忘録がてら記事にします。

実行手順とエラーの内容

さて、簡単なREST APIを作成するために、Dockerで環境を構築しようと下記のように最小構成でDockerfileを記載しました。

Dockerfile_修正前
FROM golang:1.20.0-bullseye

WORKDIR /data

RUN apt-get update \
    && apt-get install git \
    && go get github.com/gin-gonic/gin \
    && go get github.com/jinzhu/gorm \
    && go get github.com/go-sql-driver/mysql

早速コマンドを叩いてビルドしようとすると、

$ docker compose build

下記のようなエラーに遭遇しました。

実行結果
// (省略)
go: go.mod file not found in current directory or any parent directory.
       'go get' is no longer supported outside a module.
       To build and install a command, use 'go install' with a version,
       like 'go install example.com/cmd@latest'
       For more information, see https://golang.org/doc/go-get-install-deprecation
       or run 'go help get' or 'go help install'.

こちらを翻訳すると、

go.mod ファイルが現在のディレクトリまたは親ディレクトリに見つかりませんでした。コマンドをビルドしてインストールするには、'go install example.com/cmd@latest' のように、バージョンを指定して 'go install' を使ってください。詳細については、https://golang.org/doc/go-get-install-deprecation を参照するか、 'go help get' または 'go help install' を実行してください。

とのこと。

つまり、本エラーはgo.modファイルがなかったことが原因でした。(多分ものすごーく初歩的な躓き・・・)

解決策 : Dockerfileにgo.modファイルを作成する処理を追記する

先ほど原因だと判明した「go.modファイルがないこと」に対して、アプローチをしていきます。解決策は単純で、下記のようにDockerfileに対して、go.modのファイルを追加するコマンドgo mod init <プロジェクト名>を追記します。

Dockerfile_修正後
FROM golang:1.20.0-bullseye

WORKDIR /data

+ RUN go mod init web-service-gin
+ RUN go mod tidy

RUN apt-get update \
    && apt-get install git \
    && go get github.com/gin-gonic/gin \
    && go get github.com/jinzhu/gorm \
    && go get github.com/go-sql-driver/mysql

これを実行すると、

実行結果
// (省略)
[+] Running 3/3
 ⠿ Container web-service-gin-web-1  Running  0.0s
 ⠿ Container web-service-gin-db-1   Running  0.0s
 ⠿ Container web-service-gin-app-1  Running  0.0s

となり、上手くコンテナが立ち上がりましたね。

※ コンテナはGolang(App)、Nginx(Web)、Mysql(Db)の3つを立ち上げています

go.modファイルについては下記サイトに詳しく記載があったので、よければご覧ください。

おわりに

「go.mod file not found in current directory or any parent directory.」の対処法は以上です。サーバーサイドでは初めてPHP以外の言語を扱っているので(新卒の会社でC言語は研修で触りましたが)、超初歩的な内容となっています。

今後は業務でずっとPHP(Laravel)を触ってきて、現在Golangの学習をしている人に向けて、それぞれを比較しながら記事を書けたらいいなあと何となく思っています。

何かご指摘等あればコメントいただけると嬉しいです。

4
0
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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?