質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

解決済

Go (Ginフレームワーク)で、ルーティング、コントローラなどを機能別に分けた状態で、「go mod init」してもパッケージとして認識されない。

tamahimesama_xz
tamahimesama_xz

総合スコア27

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

1回答

0評価

0クリップ

489閲覧

投稿2022/06/14 17:02

編集2022/06/15 22:32

いつもご助言いただきありがとうございます。

今回は、機能別に自作したパッケージが各々認識されないという問題があったため、Ginというよりは、Goモジュールの基本的な事について質問させていただきます。
ぜひともよろしくお願いいたします。

実現したいこと

Ginの環境を下記Treeのように機能別に分けて構築しようとしました。
ルーティングは「router/router.go」として、リクエストを受け取る機能は「controller/piyo.go」として定義しました。
(Docker関連のファイルはここでは省略です。)

tree

/hoge_project ├── controller │   └── piyo.go ├── go.mod ├── go.sum ├── main.go └── router └── router.go

◆GoコンテナのGo環境変数状況(一部)

env

GO111MODULE="" GOMODCACHE="/go/pkg/mod" GOPATH="/go" GOROOT="/usr/local/go" GOVERSION="go1.18.3"

どのようにgo mod initしたか

◆「hoge_project」を基準にgo mod initを実行し、Ginを含めたパッケージのインストールを試しました。

go mod init hoge_project go mod tidy

発生している問題・エラーメッセージ

Goのコンテナに入り込み、go run main.go でGinを起動使用としたところ下記のエラーが出ました。

root@***********:/go/src# go run main.go # gin hoge_project/router router/router.go:14:20: undefined: controller

さらに、go mod initしたはずが、VSCodeでrouter/router.goのソースで、パッケージが認識されないメッセージと赤いマークが表示されました。


該当のソースコード

◆ main.go

go

package main import ( "hoge_project/router" # <-認識されない "github.com/gin-gonic/gin" ) func main() { engine := gin.Default() router.LoadRouter(engine) if err := engine.Run(":8080"); err != nil { panic(err) } }

◆ router/router.go

go

package router import ( "github.com/gin-gonic/gin" "hoge_project/controlller" # <-認識されない ) v1 := engine.Group("/v1") { v1.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{"message": "OK"}) }) v1.GET("/piyo", controller.Piyo) # <-認識されない }

◆ controller/piyo.go

go

package controller import "github.com/gin-gonic/gin" func Piyo(c *gin.Context) { c.JSON(200, gin.H{"hello": "world"}) }

補足情報(FW/ツールのバージョンなど)

実行環境 = Windows版VirtualBox6.1で、UbuntuServer 20.04.4 LTS
Docker = Version:20.10.17
docker-compose = Version: 2.5.1
Goのコンテナ = golang:latest => Version: 1.18.3
Gin = Version:1.8.1
エディタ = VSCode(Go関連の拡張機能をインストール済)


以上よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。