Import struct from another package and file golang

StructGoPackage

Struct Problem Overview


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.

Struct Solutions


Solution 1 - Struct

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 - Struct

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 - Struct

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJakob SvenningssonView Question on Stackoverflow
Solution 1 - StructiczaView Answer on Stackoverflow
Solution 2 - StructddotsenkoView Answer on Stackoverflow
Solution 3 - StructsprutexView Answer on Stackoverflow