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})
?
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