Import struct from another package and file golang
I have a problem trying to import a type from another package and file. The struct that I'm trying to import is the one underneath.
type PriorityQueue []*Item
type Item struct {
value string
priority int
index int
}
If I would put the PriorityQueue alongside with all of its methods in the same file I'd declare it with
pq:= &PriorityQueue{}
I've been searching the internet like a madman for an answer on this simple question but I have not found an answer. I usually program in java and import classes is so elementary.
Solution 1:
In Go you don't import types or functions, you import packages (see Spec: Import declarations).
An example import declaration:
import "container/list"
And by importing a package you get access to all of its exported identifiers and you can refer to them as packagename.Identifiername
, for example:
var mylist *list.List = list.New()
// Or simply:
l := list.New()
There are some tricks in import declaration, for example by doing:
import m "container/list"
You could refer to the exported identifiers with "m.Identifiername"
, e.g.
l := m.New()
Also by doing:
import . "container/list"
You can leave out the package name completely:
l := New()
But only use these "in emergency" or when there are name collisions (which are rare).
Solution 2:
What @icza said above plus:
With Go 1.9 there are type aliases that allow you to import types from packages and alias them into what look like local types:
package.go
contents:
type A struct {
X, Y int
}
main.go
contents:
...
import myTypes "path/to/package"
// Note the equal sign (not empty space)
// It does NOT create a new "subclass"
// It's an actual alias that is local.
// Allows you to avoid whole-sale `import . "path/to/package"` which imports all objects from there into local scope.
type A = myTypes.A
...
Solution 3:
Also, if you want to export a struct and init this struct value outside of it's package than all fields of the struct must start with capital letter, otherwise you will get an error "Unexported field 'fieldName' usage"
type Item struct {
Value string // uppercase V
Priority int // uppercase P
Index int // uppercase I
}
Thanks to @Vasantha Ganesh comment