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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Go

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

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Q&A

解決済

1回答

16399閲覧

Golangでcould not import(no package for import)というエラーでインポートができない

noa-1129

総合スコア25

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Go

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

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

0グッド

0クリップ

投稿2020/10/11 09:23

編集2020/10/11 09:40

前提・実現したいこと

golang(gin)/vue/mysqlでSPAを作っている際、entityのインポートでエラーが出てしまいます。

パッケージ構成

golang_spa │ server.go │ ├─controllers │ └─controller │ productController.go │ ├─models │ ├─db │ │ productDb.go │ │ │ └─entity │ Product.go │ └─views ├─css │ product.css │ ├─js │ vueProduct.js │ └─static index.html

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

{ "resource": "/Users/noay/program/golang/golang_spa/controllers/controller/productController.go", "owner": "_generated_diagnostic_collection_name_#0", "severity": 8, "message": "could not import ../../models/entity (no package for import ../../models/entity)", "source": "compiler", "startLineNumber": 11, "startColumn": 9, "endLineNumber": 11, "endColumn": 30 }

該当のソースコード

golang

1package controller 2 3import ( 4 // 文字列と基本データ型の変換パッケージ 5 strconv "strconv" 6 7 // Gin 8 "github.com/gin-gonic/gin" 9 10 // エンティティ(データベースのテーブルの行に対応) 11 entity "../../models/entity" 12 13 // DBアクセス用モジュール 14 db "../../models/db" 15) 16 17// 商品の購入状態を定義 18const ( 19 // NotPurchased は 未購入 20 NotPurchased = 0 21 22 // Purchased は 購入済 23 Purchased = 1 24) 25 26// FetchAllProducts は 全ての商品情報を取得する 27func FetchAllProducts(c *gin.Context) { 28 resultProducts := db.FindAllProducts() 29 30 // URLへのアクセスに対してJSONを返す 31 c.JSON(200, resultProducts) 32} 33 34// FindProduct は 指定したIDの商品情報を取得する 35func FindProduct(c *gin.Context) { 36 productIDStr := c.Query("productID") 37 38 productID, _ := strconv.Atoi(productIDStr) 39 40 resultProduct := db.FindProduct(productID) 41 42 // URLへのアクセスに対してJSONを返す 43 c.JSON(200, resultProduct) 44} 45 46// AddProduct は 商品をDBへ登録する 47func AddProduct(c *gin.Context) { 48 productName := c.PostForm("productName") 49 productMemo := c.PostForm("productMemo") 50 51 var product = entity.Product { 52 Name: productName, 53 Memo: productMemo, 54 State: NotPurchased, 55 } 56 57 db.InsertProduct(&product) 58} 59 60// ChangeStateProduct は 商品情報の状態を変更する 61func ChangeStateProduct(c *gin.Context) { 62 reqProductID := c.PostForm("productID") 63 reqProductState := c.PostForm("productState") 64 65 productID, _ := strconv.Atoi(reqProductID) 66 productState, _ := strconv.Atoi(reqProductState) 67 changeState := NotPurchased 68 69 // 商品状態が未購入の場合 70 if productState == NotPurchased { 71 changeState = Purchased 72 } else { 73 changeState = NotPurchased 74 } 75 76 db.UpdateStateProduct(productID, changeState) 77} 78 79// DeleteProduct は 商品情報をDBから削除する 80func DeleteProduct(c *gin.Context) { 81 productIDStr := c.PostForm("productID") 82 83 productID, _ := strconv.Atoi(productIDStr) 84 85 db.DeleteProduct(productID) 86} 87

試したこと

・タイプミスの確認

・ディレクトリ構成の確認

・go toolsのアップデート

・下記の確認

"go.toolsEnvVars":{ "GO111MODULE":"on", }

・コードの打ち直しやエディタの再起動などを試していると、他ディレクトリのentityのインポートー文にエラーが移ったりもしてよくわかりません????

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

vue@2.6.12

・go version go1.15.2 darwin/amd64

・gin v1.6.3

・mysql Ver 8.0.21 for osx10.15 on x86_64 (Homebrew)

参考記事(ソースコード)

Go/Gin/MySQLでSPAを開発(ソースコード)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2020/10/11 09:36

EntityFrameworkのタグは無関係なんで外しましょう。
noa-1129

2020/10/11 09:40

ご指摘ありがとうございます。気をつけます!
guest

回答1

0

ベストアンサー

参考にされたコードも質問者もお勧めしない「相対パスインポート」を使っています。

GO111MODULE=offでなければ相対インポートはできません。
Goでは相対パスによるインポートはもう使わない方が良い状況です。
リポジトリルートにGoモジュール名を付与して
Goモジュール名をルートにした絶対パスを利用するようにしましょう。

例:

shell

1cd golang_spa 2go mod init golang_spa # モジュール名を付与(推奨は「ドメイン/ユーザー名/モジュール名」)

インポートの書き方は以下のような書き方で「.(ドット)」や「..」をパス名に使わないようにしましょう。

go

1import ( 2 "golang_spa/controllers/controller" 3 "golang_spa/models/entity" 4)

投稿2020/10/11 12:07

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noa-1129

2020/10/11 12:49

回答ありがとうございます!相対パス、絶対パスについては名前はみれど意識したことがなかったのでしっかり勉強しようと思います!ちなみに、今回のようにgithub.com/username/modulesnameなどを推奨しているのを見かけますが、どういった理由からなのかもお伺いしたいです!
nobonobo

2020/10/11 13:30

リポジトリURLと合致させることがモジュールの公開の条件です。 公開する予定がない場合はURLにする必要はないだけです。 ただ、相対パスはもともと非推奨でしたが使うことはできていました。 しかし、Goモジュールモードになってからはエラーになるので使うことはできません。
noa-1129

2020/10/11 13:37

重ねての質問の回答ありがとうございます!参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問