Go language package structure

go

Solution

First: Your Setup misses the folder `src`: It should be `$GOPATH/src/github.com/..."

Second: Do not use relative imports. Just do not do it. Import package numbers like `import "github.com/username/projectname/number"`

To your questions:

No. If you have Go files in a folder the are combined to a package but you are not force to put a package into all folders.

All the files `rational.go`, `complex.go` and `real.go` would normally start with `package numbers`. The are all part of package numbers and you do not include files but packages. The current package need not be imported. So: No.

Yes

Problem

I am trying to learn Go and to follow the existing conventions, but, as every convention, you need to first understand them before use them well, and after some research, I didn't find an exact answer to my following question: I've set up a project inside my `$GOPATH`, following a similar structure like this: ``` $GOPATH/ github.com/ username/ projectname/ main.go numbers/ rational.go real.go complex.go ``` My main is: ``` package main import( "fmt" "./numbers" ) func main() { fmt.Println(numbers.Real{2.0}) } ``` So, the questions are: I read that I need to have a file `package.go` inside each package folder, is that right ? If so, inside `numbers.go`, how will I import `rational.go`, `real.go` and `complex.go` ? And then, is it possible to have something like: ``` // real.go package numbers type Real struct { Number float64 } ``` ... and in main do `fmt.Println(numbers.Real{2.0})` ?

Original source