【发布时间】:2021-06-04 15:48:18
【问题描述】:
我对 Golang 有一些关于导入本地包的问题。这是我的项目结构
home/src/github.com/username/project1
|main.go
|go.mod
├── handlers
│ ├── handlers.go
├── usecases
| ├─ ...
|...
我的go.mod
module project1
go 1.16
我的main.go
package main
import (
"fmt"
"net/http"
"project1/handlers/handlers"
)
func main() {
http.HandleFunc("/", handlers.Greet)
http.ListenAndServe(":8080", nil)
}
我的handlers/handlers.go
package handlers
import (
"net/http"
"fmt"
)
func Greet(w http.ResponseWriter, r *http.Request) {
//Do stuff
}
我正在 GOPATH 之外构建它,即 C:\users\...\go,我使用的是 go 1.16。
在阅读了一些说我可以使用模块名称和包的路径来导入包之后,我使用这一行将handlers 包导入到main 包。
import "project1/handlers/handlers"
但是当我尝试运行它时会返回此错误。
package project1/handlers/handlers is not in GOROOT (C:\...\project1/handlers/handlers)
然后我尝试更改一些东西,例如更改我的模块名称和导入路径
//module name in go.mod
module github.com/username/project1
//import path in main.go
import "github.com/username/project1/handlers/handlers"
但随后它返回错误说我需要先使用go get github.com/username/project1/handlers/handlers 获取包,当我尝试使用该命令获取它时,或者只是简单地go mod tidy 返回repository not found 错误,因为我没有推送/发布这个项目,我不打算做。
那么,我在这里犯了什么问题/错误?我必须先发布我的项目才能导入我自己的本地包吗?我错过了一些配置吗?我们感谢每一个帮助。
【问题讨论】:
-
尝试在
go.mod存在的目录中构建。 -
使用
import "project1/handlers"。包对应目录。 -
@CeriseLimón 啊.. 它有效,谢谢!那么,我需要像我的包一样命名我的目录吗?另外,这意味着我不能在 1 个目录中拥有超过 1 个包,对吗?
-
不要在你的问题中给出答案。相反,请单击底部的答案按钮。我已经把你的答案移到了正确的答案,但如果你想自己做以获得任何声誉,我会删除我的。
-
“我需要像我的包一样命名我的目录吗?另外,这意味着我不能在 1 个目录中拥有超过 1 个包”是的,是的。这一切在 golang.org 上都有详细解释。