与main位于同一父文件夹的结构不可见

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:
configuration.go:

package main

type Config struct {
    Data int
}

Main file just uses the Config struct:
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?
Thanks

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:

Try to run your application with command:

go run *.go

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.