【问题标题】:Why can't I import package in the same module? [closed]为什么我不能在同一个模块中导入包? [关闭]
【发布时间】: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 上都有详细解释。

标签: go module package


【解决方案1】:

我在导入路径中放了太多路径,它应该停在目录而不是包。所以通过将导入路径更改为

import "project1/handlers"

//rather than
import "project1/handlers/handlers"

解决了这个问题。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多