1. ホーム
  2. go

[解決済み] テスト

2022-01-29 05:48:34

質問

バージョン1.12.1でgoプロジェクトを作成しています。 もし私が GOPATH="$(pwd)/vendor:$(pwd)" GOBIN="$(pwd)/bin" go clean 以下のようなエラーが発生します。

can't load package: package github.com/marvincaspar/go-example: unknown import path "github.com/marvincaspar/go-example": cannot find module providing package github.com/marvincaspar/go-example

のみです。 go clean , go run または go build は正常に動作します。

以下はメインコードのフォルダ構成です。

.
├── Makefile
├── cmd
│   └── server
│       └── main.go
├── go.mod
├── go.sum
└── pkg
    └── storage
        └── mysql
            └── storage.go

以下は go.mod ファイルは次のようになります。

module github.com/marvincaspar/go-example
go 1.12

require (
    github.com/go-sql-driver/mysql v1.4.1
)

そして最後に main.go ファイルを作成します。

package main

import (
    "fmt"
    "os"

    "github.com/marvincaspar/go-example/pkg/storage/mysql"
)

func main() {
    if err := run(); err != nil {
        fmt.Fprintf(os.Stderr, "%v", err)
        os.Exit(1)
    }
}

func run() error {
    // init storage
    s := mysql.NewStorage()
    // do some other stuff...
}


何が間違っているのか、何か思い当たることはありますか?

解決方法は?

Go build/install はルートディレクトリにあるメインパッケージを探そうとしており、あなたの場合、サブディレクトリ(cmd/server)をチェックしていません。そのため、package not found エラーになります。

正しくビルドするためには、次のように実行します。

go build github.com/marvincaspar/go-example/cmd/server

同様に、プロジェクトを実行するには、module-name/main-package-pathを指定する必要があります。

go run github.com/marvincaspar/go-example/cmd/server

Go clean も同様に module-name/path-with-main-package を指定することで実行可能です。

go clean github.com/marvincaspar/go-example/cmd/server

または

GOPATH="$(pwd)/vendor:$(pwd)" GOBIN="$(pwd)/bin" go clean github.com/marvincaspar/go-example/cmd/server 

しかし https://blog.learngoprogramming.com/code-organization-tips-with-packages-d30de0d11f46 ソースファイルはプロジェクトのルートに置いてください。その方がいいんです。