如何在Go中从当前目录导入文件

时间:2019-10-13 21:37:13

标签: go import path

简介

我正在尝试将EventController.go导入我的main.go文件。

目录:


├───Controllers
│    └───Event
│        └───EventController.go
├───Models
├───Routes
│
└ Main.go   

问题:

import (
    "log"
    "net/http"

    _ "/Controllers/Event/EventController.go" //problem here
)

错误:cannot import absolute path

我阅读了一些文档,但事实是,尽管我了解了$ GOPATH,但是我想正确地使用它,但是我想使用本地目录。

我在做什么错,这是什么错误

注意:我想补充一点,我将Windows用作操作系统

谢谢。

3 个答案:

答案 0 :(得分:2)

有几个问题:

  • 包是导入的,不是文件(如其他答案所述)
  • 文件绝对导入路径作为错误状态无效。应用程序可以使用文件相关的导入路径(该路径以“ ./”开头)或相对于Go工作空间的路径。有关语法的信息,请参见go command doc。相对于Go工作空间的导入路径是首选形式。
  • 对于包(及其对应的目录)使用小写名称是惯用的。问题中的骆驼案例名称是可行的,但最好顺其自然。

文档How to Write Go Code是有关如何执行此操作的不错的教程。

这是上面给出的重新组织代码的方法。假设main.go在导入路径为“ myapp”的软件包中。将此导入路径更改为所需的任何内容。

-- main.go --

package main

import (
    "log"
    _ "myapp/controllers/event"
)

func main() {
    log.Println("hello from main")
}

-- go.mod --

module myapp

-- controllers/event/eventController.go --

package event

import "log"

func init() {
    log.Println("hello from controllers/event")
}

Run this example on the Go playground

答案 1 :(得分:0)

您无法导入文件。您可以导入包。因此,假设您的主要包是“ github.com/mypackage”包,那么您应该导入“ github.com/mypackage/Controllers/Event”。

答案 2 :(得分:0)

Go支持程序包级别的导入。您可以通过将包添加到文件开头的import语句中来导入包。

在您的情况下,您应该执行以下操作-

import (
    "log"
    "net/http"

    "Controllers/Event/EventController"
)

此外,您应该从文件名中删除第一个“ /”

_ /Controllers/Event/EventController.go" //problem here

因为您的 Controllers 文件夹与 Main.go 文件处于同一级别。您应该始终在import语句中提供相对路径。

通过这种方式,您可以使用 EventController 文件夹下列出的任何文件。