GO (Golang) 在同一目录中看不到其他 .go 文件

GO (Golang) does not see other .go files inside the same dir

问题: 从其他包导出的函数未定义,在 main.go

内部不可见

解决方案:main.go 放入 单独的文件夹 (将其命名为 app 或 main,不会事情)。只有 go.mod 保留在根目录中,文件夹“app”和“package1”“package2”等。此后 VSCode 在保存时自动添加导入,我没有甚至需要做任何事情。如果我在 root 中有 main.go 那么它就不起作用(大部分时间),因为它不会“看到”来自其他模块(未定义)的函数。

我找到了解决方案 HERE,(请参阅 davidbost 的 post)。 Andrey Dyatlov 在此页面上的解决方案也工作了一段时间,然后停止工作。

我大概花了 10 个小时的尝试、错误和搜索。 希望以上对大家有所帮助。谢谢大家!

_______________________________________________________________________

原问题描述:

Windows 10,Go 1.17,带有 Go 扩展的 VS Code。

你好,我是 Go 的新手,由于以下问题,我无法学习单个教程。当我在与 main.go 相同的目录(或同一目录的文件夹内)创建另一个 .go 文件时,我收到错误提示 .\main.go:7:2:未定义: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 运行 main.go 导致未定义的 SayHi 错误

我用谷歌搜索了这个问题,但没有成功。

$ go build // 给出同样的错误

$ go install // 给出同样的错误

不使用其他文件中的函数 $ go 运行 main.go 运行s just fine.

我还尝试 go init 添加我的 github 目录,但没有成功(通过遵循教程)。我也用go 运行 init试过官方的starting guide,导出的Capitalized函数还是未定义。更糟糕的是,SayHi 函数的自动完成功能有效,但由于未定义而无法编译。

我已将 PATH 设置为 C:\Users\xxx\go 并将我的文件放在那里,我也尝试使用 C:\Go 但没有成功,它仍然未定义。我要放弃 Go...

在不知道项目当前状态的情况下很难修复项目。请尝试从头开始:

  1. $GOPATH:

    之外的任何地方为您的项目创建一个目录
    mkdir myproject
    cd myproject
    
  2. 运行 以下命令创建一个 go.mode 文件,描述您的项目(模块)及其依赖项;让我们调用模块 github.com/me/myproject:

    go mod init github.com/me/myproject
    
  3. 创建第一个文件;我们称它为 main.go:

    package main
    
    import "fmt"
    import "github.com/me/myproject/something"
    
    func main() {
        fmt.Println("1st")
        something.SayHi()
    }
    
  4. 为名为 github.com/me/myproject/something 的包创建一个目录:

    mkdir something
    
  5. 创建路径为 something/something.go 的文件:

    package something
    
    import "fmt"
    
    func SayHi() {
        fmt.Println("Hi!")
    }
    
  6. myproject 目录,运行 go build.

  7. 启动您的第一个 Go 程序:

    ./myproject
    1st
    Hi!