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

当前回答

跑题了,但仍然:-)

之前:

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

后:

func NewEmployee() *Employee {
    return &Employee{}
}

不需要创建新变量。就回来了。

其他回答

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

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

在我的一个go文件中,我有一个讨厌的导入“C”。

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

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

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

go mod init example.com/employee

我刚刚在GoLand遇到了同样的问题(这是Intellij IDEA for Go),并想出了一个解决方案。您需要将运行类型从文件更改为包或目录。如果你进入Run/Edit Configurations,你可以从下拉菜单中选择这个选项。

例如:对于包~/go/src/a_package,使用a_package的包路径和~/go/src/a_package的目录,并运行kind的包或目录。

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