英文:
Struct from the same parent folder as main is not visible
问题
我在Gogland中有一个小的Go演示项目,结构如下:
awsomeProject
->src
->awsomeProject
->configuration.go
->main.go
配置文件只是为了演示而具有简单的结构:
<br>configuration.go:
package main
type Config struct {
Data int
}
主文件只使用Config结构体:
<br>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函数中无法看到Config?
<br>谢谢
英文:
I have a small go demo project in Gogland with the structure:
awsomeProject
->src
->awsomeProject
->configuration.go
->main.go
Configuration file has a simple structure just for demo:
<br>configuration.go:
package main
type Config struct {
Data int
}
Main file just uses the Config struct:
<br>main.go
package main
import "fmt"
func main(){
var cfg Config
cfg.Data = 1
fmt.Println("lalala")
}
The error that I have is:
> /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
Any idea why the Config is not seen in main?
<br>Thanks
答案1
得分: 1
当您构建可重用的代码片段时,您将开发一个作为共享库的包。但是当您开发可执行程序时,您将使用“main”包将包作为可执行程序。包“main”告诉Go编译器该包应该编译为可执行程序,而不是共享库。包“main”中的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
}
更多详情请参考:
英文:
When you build reusable pieces of code, you will develop a package as a shared library. But when you develop executable programs, you will use the package “main” for making the package as an executable program. The package “main” tells the Go compiler that the package should compile as an executable program instead of a shared library. The main function in the package “main” will be the entry point of our executable program.
That's why you should use the following structure:
awsomeProject
->src
->awsomeProject
->configuration.go
->main.go
with main.go
package main
import "fmt"
func main(){
var cfg awsomeProject.Config
cfg.Data = 1
fmt.Println("lalala")
}
and configuration.go
package awsomeProject
type Config struct {
Data int
}
For more details:
答案2
得分: 1
你是如何调用go run的?如果你像这样调用它:
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
只是为了方便一些。
这可能并不是你遇到的问题的答案,但希望你会发现这些信息有用。
英文:
How are you calling go run? If you're calling it like
go run main.go
then that's the problem.
Go run only runs the file(s) you tell it to. So you need to tell it to also run configuration.go, or if you have several go files to run you can use
go run *.go
as eXMoor suggested.
There are some limits/drawbacks to "go run *.go" however, so the better alternative is to use go build instead of go run.
go build
Will compile everything. Then, to run the executable:
./awesomeProject
To combine all of this into one command that will compile and run whatever app you're working on, you can use:
go build && ./${PWD##*/}
I have it aliased to
gorunapp
just to make it easier.
This may not actually be the answer to the problem you're having, but hopefully you'll find it useful information regardless.
答案3
得分: 0
尝试使用以下命令运行你的应用程序:
go run *.go
英文:
Try to run your application with command:
go run *.go
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论