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

fen*_*lyn 0 import undefined go

问题:从其他包导出的函数未定义,在 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()
}
Run Code Online (Sandbox Code Playgroud)

/something 文件夹中的另一个 .go 文件:

package something

import "fmt"

func SayHi() {
    fmt.Println("Hi!")
}
Run Code Online (Sandbox Code Playgroud)

运行 go run main.go 会导致未定义的 SayHi 错误

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

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

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

不使用其他文件中的函数 $ go run main.go 运行得很好。

我还尝试使用go init添加我的 github 目录,但没有成功(通过遵循教程)。我还尝试了官方的go run init入门指南,导出的C函数仍然未定义。更糟糕的是 SayHi 函数的自动完成功能可以工作,但由于未定义而无法编译。

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

And*_*lov 5

如果不知道项目的当前状态,就很难修复它。请尝试从头开始:

  1. 在外部任意位置为您的项目创建一个目录$GOPATH

    mkdir myproject
    cd myproject
    
    Run Code Online (Sandbox Code Playgroud)
  2. 运行以下命令创建一个go.mod描述您的项目(模块)及其依赖项的文件;让我们调用该模块github.com/me/myproject

    go mod init github.com/me/myproject
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建第一个文件;我们称它为main.go

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

    mkdir something
    
    Run Code Online (Sandbox Code Playgroud)
  5. 创建一个带有路径的文件something/something.go

    package something
    
    import "fmt"
    
    func SayHi() {
        fmt.Println("Hi!")
    }
    
    Run Code Online (Sandbox Code Playgroud)
  6. myproject目录中运行go build.

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

    ./myproject
    1st
    Hi!
    
    Run Code Online (Sandbox Code Playgroud)