Saki's 研究记录

go run 报错 undefined

字数统计: 214阅读时长: 1 min
2024/08/26

问题

githubclone 下来了个项目,结构组织很简单就两个文件,类似 main.goa.go
main 函数在 main.go 中, 并且在 main 函数中调用了 a.go 中的函数。

执行 go run main.go 时报错:

1
2
3
4
> go run main.go
# command-line-arguments
./main.go:15:9: undefined: funcA
...

但执行 go build 却不会报错,且生成可执行文件功能正常。

原因

报错原因是 go run 会先进行编译操作, 但在编译时只会以 main.go 为准, 导致引用其他文件时出现 undefined 的情况。
相反, go build 当没有参数时,它会编译当前目录下的所有 Go 源码文件,生成可执行文件。

方案

方案1 - 老老实实

1
go run main.go a.go

方案2 - 简单粗暴

1
go run *.go

方案3 - 不管不顾

1
go build

以上。

CATALOG
  1. 1. 问题
  2. 2. 原因
  3. 3. 方案
    1. 3.1. 方案1 - 老老实实
    2. 3.2. 方案2 - 简单粗暴
    3. 3.3. 方案3 - 不管不顾