为什么我无法在同一模块中导入包?

我对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之外构建这个,我正在使用go 1.16。C:\users\...\go


在阅读了一些来源之后,说我只能使用模块名称和包的路径来导入包,我使用此行将包导入到包。handlersmain


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/handlersgo mod tidyrepository not found


那么,我在这里犯的问题/错误是什么?我必须先发布项目,然后才能导入自己的本地包吗?我是否错过了一些配置?每一个帮助都是值得赞赏的。


幕布斯7119047
浏览 84回答 1
1回答

慕桂英4014372

我在导入路径中放置了太多的路径,它应该停在目录而不是包上。因此,通过将导入路径更改为import "project1/handlers"//rather thanimport "project1/handlers/handlers"修复了问题。谢谢!
打开App,查看更多内容
随时随地看视频慕课网APP