来自与 main 相同的父文件夹的结构不可见

Struct from the same parent folder as main is not visible

我在 Gogland 有一个小型的 go 演示项目,结构如下:

awsomeProject
    ->src
        ->awsomeProject
            ->configuration.go
            ->main.go

配置文件结构简单,仅供演示:
configuration.go:

package main

type Config struct {
    Data int
}

主文件只使用 Config 结构:
main.go

package main

import "fmt"

func main(){
    var cfg Config
    cfg.Data = 1
    fmt.Println("lalala")
}

我的错误是:

/usr/local/go/bin/go run /Users/lapetre/Work/awsomeProject/src/awsomeProject/main.go command-line-arguments src/awsomeProject/main.go:6: undefined: Config Process finished with exit code 2

知道为什么在 main 中看不到配置吗?
谢谢

当您构建可重复使用的代码片段时,您将开发一个包作为共享库。但是当你开发可执行程序时,你将使用包“main”来使包成为可执行程序。 “main”包告诉 Go 编译器该包应该编译为可执行程序而不是共享库。 “main”包中的主要函数将是我们可执行程序的入口点。

这就是您应该使用以下结构的原因:

awsomeProject
    ->src
        ->awsomeProject
            ->configuration.go
        ->main.go

main.go

package main

import "fmt"

func main(){
    var cfg awsomeProject.Config
    cfg.Data = 1
    fmt.Println("lalala")
}

configuration.go

package awsomeProject

type Config struct {
    Data int
}

更多详情:

尝试使用以下命令运行您的应用程序:

go run *.go

你怎么调用 go 运行?如果你这样称呼它

go run main.go

那就是问题所在

转到 运行 仅 运行 您指定的文件。所以你需要告诉它也 运行 configuration.go,或者如果你有几个转到 运行 的文件,你可以使用

go run *.go

正如 eXMoor 建议的那样。

但是有一些 limits/drawbacks 到 "go run *.go",所以更好的选择是使用 go build 而不是 go 运行.

go build

将编译一切。然后,运行 可执行文件:

./awesomeProject

要将所有这些合并到一个命令中,然后 运行 无论您正在开发什么应用程序,您都可以使用:

go build && ./${PWD##*/}

我有它的别名

gorunapp

只是为了让它更容易。

这实际上可能不是您遇到的问题的答案,但希望无论如何您都会发现它有用的信息。