我正在尝试编写一个基本的go程序,它调用不同文件上的函数,但是同一包的一部分。但是,它返回:

undefined: NewEmployee

以下是源代码:

main.go:

package main

func main() {
emp := NewEmployee()    
}

employee.go:

package main

type Employee struct {
    name string
    age int
}   

func NewEmployee() *Employee {
    p := &Employee{}
    return p
}

func PrintEmployee (p *Employee)  {
    return "Hello world!"
}

当前回答

我在Go11上也遇到了同样的问题,只是想分享我是如何解决它的,以帮助其他人,以防他们遇到同样的问题。

我的Go项目在$GOPATH之外,所以我必须打开GO111MODULE=on没有这个选项,它会给你这个问题;即使你尝试构建或测试整个包或目录,如果没有GO111MODULE=on,它也不会解决

其他回答

如果你的源文件夹是structured /go/src/blog(假设你的源文件夹的名字是blog)。

CD /go/src/blog…(cd在有你的包的文件夹内) 去安装 博客

这样可以同时运行所有文件,而不必手动列出文件或在命令行上“敲打”某个方法。

如果你在使用go run,一定要去run *。go。它会自动找到当前工作目录下的所有go文件,编译然后运行main函数。

花了一段时间来研究我自己的MRE,所以希望它能帮助其他人,尽管很简短:

如果你的函数/结构定义在一个导入“C”的文件中,如果你的go环境中是CGO_ENABLED=0,它将被无声地忽略,导致你盯着两个文件包,以某种方式无法在它们之间共享,也会发生这种情况。

如果你想从另一个go文件调用一个函数,并且你正在使用Goland,然后从运行菜单中找到“编辑配置”选项,并将运行类型从文件更改为目录。它清除所有错误,并允许您从其他go文件调用函数。

在GoLand,

右键单击一个目录 GoLand将为您提供构建和运行它的选项 它还将为您创建一个运行配置草案 你可以通过右上角的下拉菜单进行保存

如果右旋一个文件,它会显示运行、调试、测试该文件的命令。

如果你对一个目录,它将是相同的“包”,期望一个主。进入目录中的文件