0

我在 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:未定义:配置过程完成,退出代码2

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

4

3 回答 3

1

当您构建可重用的代码片段时,您将开发一个包作为共享库。但是当您开发可执行程序时,您将使用包“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
}

更多细节:

于 2017-07-21T11:40:52.893 回答
1

你怎么叫跑?如果你这样称呼它

go run main.go

那么这就是问题所在。

Go run 只运行你告诉它的文件。所以你需要告诉它也运行 configuration.go,或者如果你有几个 go 文件要运行,你可以使用

go run *.go

正如 eXMoor 建议的那样。

然而,“go run *.go”有一些限制/缺点,所以更好的选择是使用 go build 而不是 go run。

go build

将编译所有内容。然后,运行可执行文件:

./awesomeProject

要将所有这些组合成一个命令来编译和运行您正在处理的任何应用程序,您可以使用:

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

我有它的别名

gorunapp

只是为了让它更容易。

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

于 2017-07-21T14:01:55.610 回答
0

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

go run *.go
于 2017-07-21T11:59:02.860 回答