如何从Golang中的相邻文件导入代码

时间:2018-10-19 05:39:17

标签: go

是的,这是学习新的编程语言时的典型问题。我有这个:

$GOPATH/
   src/
     huru/
       foo/
          side.go
       hello.go

在hello.go中,我有:

package main

import (
    "encoding/json"
    "log"
    "net/http"
    "github.com/gorilla/mux"
)


func main(){
   Foo()
}

在foo / side.go中,我有:

package main

func Foo() {

}

我跑步:

go install huru

我得到:

# huru
src/huru/hello.go:22:2: undefined: Foo

编译器不喜欢Foo()中的hello.go调用,如何正确导入?我应该对两个文件都使用package main吗?我假设不应该将软件包称为huru,而不是huru,为什么不将其称为main? idk。

2 个答案:

答案 0 :(得分:4)

Go Documentation中所述,程序是由一个未导入的main包定义的。一个程序中不能有多个main软件包,因此,如果要创建一个库,例如您的foo目录,您需要定义一个不同的包名称。

文档a description中还包含有关如何处理导入的信息。公平地说,这有点神秘,他们没有明确提到$GOPATH,但是导入是相对于它的。但是,您不能导入相对于特定文件的软件包。

如果您执行以下操作,您的代码将可以正常编译:

hello.go:

package main

import . "huru/foo"

func main() {
        Foo()
}

foo / side.go:

package foo

import "fmt"

func Foo() {
        fmt.Println("Hello from side.go");
}

答案 1 :(得分:3)

您不能使用main作为huru/foo/side.go的程序包名称,因为它已经在路径与huru/hello.go所在的side.go中使用。

因此,在huru/foo/side.go文件上更改程序包名称。 Better to use folder name as the package name

package foo

func Foo() {

}

然后在huru/hello.go上导入huru/foo包,这样就可以使用内部文件中定义的Foo()函数了。

package main

import (
    "encoding/json"
    "log"
    "net/http"
    "github.com/gorilla/mux"
    "huru/foo" // <------ here
)

func main(){
   foo.Foo()
}