golang"undefined"函数在另一个文件中声明?

Jua*_*n M 114 func undefined go

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

undefined: NewEmployee
Run Code Online (Sandbox Code Playgroud)

这是源代码:

main.go:

package main

func main() {
emp := NewEmployee()    
}
Run Code Online (Sandbox Code Playgroud)

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!"
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

Jim*_*imB 145

请阅读"如何编写Go代码".

不要/src在你的身上使用GOPATH.套餐位于$GOPATH/src.

对于build或者install您需要将文件放在包目录中.

因为go run,您需要提供所有文件作为参数:

go run main.go employee.go
Run Code Online (Sandbox Code Playgroud)

但是,你应该几乎总是使用go install,或者go build(最好是前者,因为go build在处理非主要包时会引起混淆)

  • 或者$ go run*.go (6认同)
  • @Puran `go run *.go` 是一个坏主意,因为如果您有任何构建约束或测试文件,它就会中断。 (2认同)

And*_*ips 45

我在GoLand中遇到了同样的问题并找到了解决方案.您需要将Run kindfrom 更改FilePackageDirectory.如果进入Run/Edit配置,可以从下拉列表中选择此选项.

对于包装~/go/src/a_package,Package patha_packageDirectory~/go/src/a_package.你可以选择Run kind你喜欢的.

  • 谢谢,这就是我一直在寻找的。请注明您的答案是关于 Intellij IDEA 的。 (8认同)

Pau*_*erg 9

如果您正在使用go run,请执行go run *.go。它将自动在当前工作目录中找到所有go文件,进行编译,然后运行您的主要功能。


Mig*_*yes 8

go run .将运行您的所有文件。入口点是包main()必须唯一的函数main

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

  • 我已经有一段时间运行我的旧 go 项目并且忘记了如何运行。通过你的回答我终于找到了。这应该是一个赞成的答案! (2认同)

小智 5

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


Cha*_*era 5

您可以尝试以下方法之一。

方法01:假设您的项目名称是MyProject

  • 转到您的路径,键入go build并按Enter。
  • 它将创建一个可执行文件作为您的项目名称(“ MyProject”)
  • 然后在您的终端类型中按./MyProjectEnter

您可以通过键入同时执行两个步骤go build && ./MyProject。它将正确运行所有go文件的项目。

方法02

只需键入go run *.go并按Enter。这将执行所有操作go files

希望这对某人有帮助。