我正在尝试编写一个基本的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!"
}

当前回答

在GoLand,

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

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

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

其他回答

虽然这并没有直接解决OP的具体问题,但我认为我应该为我的“undefined”错误提供解决方案:具有undefined方法的文件有一个构建约束(构建标记)。

更具体地说,我无意中包含了一个构建约束,以便在部署的二进制文件使用的实用程序函数文件中从部署的应用程序二进制文件中删除测试文件。在OP的例子中,if employee。Go有一个构建约束,他们的Go构建命令需要包含一个匹配约束的-tags标志,以便包含文件。

欲了解更多信息,请阅读这篇博客文章: https://dave.cheney.net/tag/build-constraints

你现在应该使用go模块,如果你没有遵循如何编写go代码

使用go模块,你不必把代码放在$GOPATH/src中。它也可以生活在任何其他位置。

你可以把代码移动到不同的目录,比如/employee,让它工作,在employee目录下初始化go模块

go mod init example.com/employee

在GoLand,

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

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

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

去跑步吧。会运行你所有的文件。入口点是函数main(),它必须是主包唯一的。

另一种选择是使用go build构建二进制文件并运行它。

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

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

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