我在go项目中导入本地包时遇到问题。看来,当我在本地工作时,我必须使用完整路径导入:"" github.com/username/myproject/mypackage"。但是当我推送到heroku时,我得到一个关于无法找到该包的错误。如果我将导入更改为" myproject / mypackage",它适用于heroku,但不再适用于本地。
我在研究过程中看到的两种解决方案似乎是解决方法:
vendor/
。我的理解是供应商目录适用于第三方库,所以我不应该滥用它。myproject/
移至src/
。所有golang资源似乎都强调文件结构非常重要,我应该有一个github.com文件夹。我不清楚为什么文件结构很重要,所以这就是我现在正在使用的解决方案,但我无法帮助,但我认为我做错了。< / LI>
醇>
还有其他人遇到过这个问题吗?为清晰起见,我在下面提供了我的文件结构,.go文件和Godeps.json。
我的文件结构:
$GOPATH
└───bin
└───pkg
└───src
└───github.com
└───username
└───myproject
│ main.go
└───Godeps
│ │ Godeps.json
└───mypackage
│ mypackage.go
mypackage.go
package mypackage
import (
"fmt"
)
func PrintHelloWorld() {
fmt.Println("Hello, world!")
}
main.go:
package main
import (
"fmt"
"github.com/username/myproject/mypackage" // import causing problems in heroku
"log"
"net/http"
"log"
)
func sayHelloWorld(w http.ResponseWriter, r *http.Request) {
mypackage.PrintHelloWorld()
fmt.Fprintf(w, "Hello world!")
}
func main() {
http.HandleFunc("/", sayHelloWorld)
err := http.ListenAndServe(":9090", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
Godeps.json:
{
"ImportPath": "myproject",
"GoVersion": "go1.10",
"GodepVersion": "v80",
"Deps": []
}
推送到heroku时出错:
-----> Go app detected
-----> Checking Godeps/Godeps.json file.
-----> Using go1.10
!! Installing package '.' (default)
!!
-----> Running: go install -v -tags heroku .
main.go:6:2: cannot find package "github.com/username/myproject/mypackage" in any of:
/tmp/tmp.xY81RbKUze/.go/src/myproject/vendor/github.com/username/myproject/mypackage (vendor tree)
/app/tmp/cache/go1.10/go/src/github.com/username/myproject/mypackage (from $GOROOT)
/tmp/tmp.xY81RbKUze/.go/src/github.com/username/myproject/mypackage (from $GOPATH)
! Push rejected, failed to compile Go app.