【问题标题】:Importing a local file [duplicate]导入本地文件[重复]
【发布时间】:2020-01-18 05:02:09
【问题描述】:

我真的是 Go 新手,我正在尝试在 main.go 中导入本地文件。 项目的结构如下:

-project_name(dir)
--src(dir)
---main.go
---auth(dir)
----signup.go

我正在尝试在main.go 中使用我在signup.go 中编写的函数。 这就是我尝试在main.go 中导入signup.go 的方式:

import (
  "encoding/json"
  "fmt"
  "log"
  "net/http"

  "github.com/gorilla/mux"
  auth "./auth"
)

并像这样使用它:

myRouter.HandleFunc("/signup", auth.signupUser).Methods("POST")

我也尝试复制相关auth dir 并将其写入导入但我仍然收到错误undefined: auth go

我尝试寻找答案,但我看不出我所做的与我看到的答案有什么不同。

【问题讨论】:

  • project_name 添加到GOPATH 环境变量中,也许这些对Relative Imports in golangMultiple Directories Gopath 有帮助
  • 你不导入文件,你只导入包。不要对包使用相对导入。从How to Write Go Code 开始,它解释了创建一个简单包并导入它所需的所有细节。
  • @GauravDhiman 如果我错了请纠正我,但据我了解,我需要在 GOPATH 中创建我的项目。所以如果我的 go 目录(和 GOPATH)在 /home/go,我需要在那里创建我的所有项目吗?因为我的所有项目都有一个不同的目录,它不是 /home/go。
  • @JohnDoah 不一定,您可以在GOPATH 中添加多个目录,但是要保持项目井井有条,我不建议在GOPATH 中为每个项目添加不同的目录
  • auth.signupUser 是一个未导出的标识符,因此您将无法从另一个包中使用它。请通过Tour of Go 了解语言基础知识。

标签: go


【解决方案1】:

不建议在 Go 中使用相对导入。

如果project_name 在你的GOPATH 中,比如$GOPATH/github.com/john/project_name,你可以像这样导入auth

import "github.com/john/project_name/src/auth"

如果您使用的是Go modules,则不要使用github.com/john/project_name,而是使用go.mod 中的任何名称。如果您不使用 Go 模块但想使用,您可以在 project_name 文件夹中执行 go mod init github.com/john/project_name,然后该文件夹将用作基础。

请注意,signupUser 实际上必须是 SignupUser 才能导出(因此可用)。

【讨论】:

    猜你喜欢
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 2016-04-23
    • 1970-01-01
    • 2017-06-23
    • 2021-03-28
    • 2021-09-21
    相关资源
    最近更新 更多