来自与 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
只是为了让它更容易。
这实际上可能不是您遇到的问题的答案,但希望无论如何您都会发现它有用的信息。
我在 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
只是为了让它更容易。
这实际上可能不是您遇到的问题的答案,但希望无论如何您都会发现它有用的信息。