英文:
Golang - Why can't I import local package in GOPATH/src/project but can in home directory?
问题
我有一个项目,它的文件夹结构如下:
/project
models/
Product.go
main.go
main.go的内容如下:
package main
import (
"./models"
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
fmt.Println(models.Product{})
r.GET("/", func(c *gin.Context) {
c.String(200, "he")
})
r.Run(":3000")
}
Product.go的内容如下:
package models
type Product struct {
Name string
}
我通过输入go env
得到的结果是:
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/Mac/go"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.5.3/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.5.3/libexec/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT=""
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments - fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"
当项目目录的位置是$GOPATH/src/project
时,如果我运行go run main.go
,我得到的错误消息是:./main.go:: can't find import: "github.com/gin-gonic/gin"
。
但是当项目目录的位置是~/project
时,go run main.go
可以正常工作。
我使用的是go1.5.3版本。
有人可以帮助我吗?谢谢。
英文:
I have a project, its folder structure is like following:
/project
models/
Product.go
main.go
The content of main.go is:
package main
import (
"./models"
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
fmt.Println(models.Product{})
r.GET("/", func(c *gin.Context) {
c.String(200, "he")
})
r.Run(":3000")
}
The content of Product.go is:
package models
type Product struct {
Name string
}
What I get from typing go env
is:
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/Mac/go"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.5.3/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.5.3/libexec/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT=""
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments - fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"
When the location of the project directory is $GOPATH/src/project
, If I run go run main.go
, what I get is this error message: ./main.go:: can't find import: "github.com/gin-gonic/gin"
.
But when the location of project directory is ~/project
, go run main.go
can work as expected.
I use go1.5.3.
Can anyone help me. Thanks.
答案1
得分: 5
相对导入路径仅作为一种方便的方式存在,主要用于实验目的。它们并不被go build
和go install
完全支持。如果你希望你的包能够与go
工具一起使用,请不要使用相对导入。按照如何编写Go代码中描述的方式组织你的代码。
英文:
Relative import paths are only allowed as a convenience, mostly for experimentation. They are not fully supported by go build
and go install
. If you want your package to work with the go
tools, don't use relative imports. Structure your code as described in How to Write Go Code.
答案2
得分: -1
你的代码中使用了"github.com/gin-gonic/gin",这是一个外部导入的包。因此,Go编译器会尝试在你的工作区中找到这个包。所以你需要手动在Go工作区或构建路径中下载这些包,使用命令"go get github.com/gin-gonic/gin"。
英文:
As you are using "github.com/gin-gonic/gin" in your code. It is an external import. So go compiler will try to find this package in your workspace. So you need manually download those package in your go workspace or build path
"go get github.com/gin-gonic/gin".
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论