问题:从其他包导出的函数未定义,在 main.go 内部不可见
解决方案: 将 main.go 放入 单独的文件夹(将其命名为 app 或 main,没关系)。只有 go.mod 保留在根目录中,其中包含文件夹“app”和“package1”“package2”等。在此 VSCode 在保存时自动添加导入之后,我什至不需要执行任何操作。如果我在 root 中有 main.go 那么它不起作用(大多数时候),因为它没有“看到”其他模块的函数(未定义)。
我找到了解决方案这里,(参见davidbost的帖子)。 Andrey Dyatlov 本页上的解决方案也工作了一段时间,然后停止工作。
我大概花了 10 个小时的尝试、错误和搜索。 希望以上内容对其他人有帮助。谢谢大家!
_____________________________________________________________________________
原问题描述:
Windows 10、Go 1.17、带有 Go 扩展的 VS Code。
您好,我是 Go 新手,由于以下问题,我无法遵循单个教程。当我在与 main.go 相同的目录(或同一目录的文件夹内)创建另一个 .go 文件时,我收到错误消息 .\main.go:7:2: undefined: SayHi
main.go 文件:
package main
import "fmt"
func main() {
fmt.Println("1st")
SayHi()
}
/something 文件夹中的另一个 .go 文件:
package something
import "fmt"
func SayHi() {
fmt.Println("Hi!")
}
运行 go run main.go 会导致未定义的 SayHi 错误
我用谷歌搜索了这个问题,但没有运气。
$ go build // 给出相同的错误
$ go install // 给出同样的错误
不使用其他文件中的函数 $ go run main.go 运行得很好。
我还尝试了 go init 添加我的 github 目录,但没有成功(按照教程)。我还尝试了官方的启动指南与go run init,导出的Capitalized函数仍然未定义。更糟糕的是 SayHi 函数的自动完成功能可以工作,但由于未定义而无法编译。
我已将 PATH 设置为 C:\Users\xxx\go 并将我的文件放在那里,我也尝试使用 C:\Go 但没有成功,它仍然是未定义的。我快要放弃Go了...
如果不知道项目的当前状态,就很难修复它。请尝试从头开始:
在
$GOPATH
之外的任意位置为您的项目创建一个目录:
mkdir myproject
cd myproject
运行以下命令创建一个
go.mod
文件,用于描述您的项目(模块)及其依赖项;我们将该模块称为 github.com/me/myproject
:
go mod init github.com/me/myproject
创建第一个文件;让我们称之为
main.go
:
package main
import "fmt"
import "github.com/me/myproject/something"
func main() {
fmt.Println("1st")
something.SayHi()
}
为名为
github.com/me/myproject/something
的包创建一个目录:
mkdir something
创建一个带有路径的文件
something/something.go
:
package something
import "fmt"
func SayHi() {
fmt.Println("Hi!")
}
从
myproject
目录中,运行 go build
。
启动你的第一个 Go 程序:
./myproject
1st
Hi!