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

247

我想编写一个基本的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!"
}

13
你是否在使用go run命令?(详情请参考http://golang.org/doc/code.html) - JimB
1
@JuanM,我的问题是main.goemployee.go的源代码是否完整?因为所有的Go文件都应该有一个包语句,而我在你的代码中没有看到。请参见:https://golang.org/doc/code.html#PackageNames - Chris Pfohl
1
employee.go 的最后一个函数是错误的(没有函数名称,也没有声明返回类型)。虽然这不是你要求解决的问题,但它表明还有更多的问题。你能否发布完整的代码和编译时的完整错误信息? - siritinga
1
然后展示你正在做什么!GOPATH,实际代码以及如何调用“go”工具。 - JimB
%GOPATH% C:\gocode\src文件 Employee.go 和 main.go 存放在 C:\gocode\src 目录下。 - Juan M
显示剩余5条评论
14个回答

1
需要翻译的内容:

花了一些时间来钻研自己的 MRE,希望这能对其他人有所帮助,尽管内容很简短:

如果您的函数/结构体定义在一个文件中,该文件具有 import "C",则也可能会发生这种情况,如果您的 go 环境中设置了 CGO_ENABLED=0,则会被静默忽略,导致您注视着两个文件包无法相互共享。


1

我在使用Goland时也遇到了这个问题。
需要作为一个包来运行 enter image description here

可以通过以下两种方式来解决。

1

enter image description here

2

enter image description here


0
在GoLand中,
  • 右键单击一个目录
  • GoLand将为您提供构建和运行的选项
  • 它还将为您创建运行配置草稿
  • 您可以使用右上角下拉菜单中的选项保存

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

如果您右键单击一个目录,则对于该“包”,期望在目录内有main.go文件,操作将是相同的。


我在使用goreleaser的github actions时遇到了这个错误。 - TheRealChx101

-2

如果您的源文件夹结构为/go/src/blog(假设您的源文件夹名称为blog)。

  1. cd /go/src/blog ...(进入包含您的软件包的文件夹)
  2. go install
  3. blog

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


这里还有一篇Digital Ocean的文章:https://www.digitalocean.com/community/tutorials/how-to-build-and-install-go-programs - Druhin Bala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接