LoginSignup
1
0

More than 3 years have passed since last update.

【Go 1.13】unexpected directory layout:がでた時の対処

Last updated at Posted at 2020-10-08

追記

コメントにて指摘いただきました。go modコマンドを用いると、go mod init モジュール名で指定したモジュールからインポートできることが確認できました。

$ go mod init hoge

---main.go
package main

import "hoge/sample"
|
省略
---

これで動くと思います。


Goにて開発をしていて、ファイルを用いてパッケージを分けようとしたら起きたエラー。
とりあえず解決したので、すぐさまメモ。。。

環境

バージョン
go version go1.13.14 linux/amd64
centos 7

ディレクトリ構造
./
 |
 |--sample/
 |       |
 |       |--sample.go
 |
 |--main.go

実際のコード

main.go
package main

import "./sample"

func main() {
    a := sample.Foo("test")
    sample.PrintFoo(a)
}
sample.go
package sample

import "fmt"

func Foo(s string) string {
    return "aaa " + s + " bbb"
}

func PrintFoo(s string) {
    fmt.Println(s)
}
[root@marny ---]# go build -o practice
unexpected directory layout:
        import path: _/develop/go/src/test/marny/sample
        root: /develop/go/src
        dir: /develop/go/src/test/marny/sample
        expand root: /develop/go
        expand dir: /develop/go/src/test/marny/sample
        separator: /

どういったエラーなのか

unexpected directory layout:というエラーは、どうやらimportしているパッケージのパスの指定がダメですよーというエラーらしい。

僕自身、centos7(vbox)にsambaでwindowsとつなげて編集していたので、ソースコード上でのエラーはありませんでした、、、、

解決

僕の場合、$GOPATH/develop/goと指定しています。GOPATHの仕様で、binやらsrcやらを生成して、Goの開発をするのですが、ここでエラーが起きている。

どうすれば解決するか、というと、main.goのimport./sample$GOPATH/srcから見た相対パスに変更すれば、解決します。

よって、

main.go
package main

import "test/marny/sample"

func main() {
    a := sample.Foo("test")
    sample.PrintFoo(a)
}

これで、解決すると思います。

GOPATHめんどくさいね。

1
0
3

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