Trying to import a struct type from another package, and it returns perfectly, but the values of that struct can't be found unless declared without the use of an instantiation function.
// X executes and finds values fine, Z does not.
package main
func main () {
x := &Command{}
z := command.NewCommand()
fmt.Println(x.command)
fmt.Println(z.command)
}
package command
type Command struct {
// Our structured data/object for Command
alias string
command string
verbose bool
}
func NewCommand() *Command {
// Creates a new container for []Command objects
return &Command{"","",false}
}
What exactly am I missing here...?
The relevant [golang spec]( https://golang.org/ref/spec#Exported_identifiers) is:
An identifier may be exported to permit access to it from another package. An identifier is exported if both:
the first character of the identifier's name is a Unicode upper case letter (Unicode class "Lu"); and the identifier is declared in the package block or it is a field name or method name. All other identifiers are not exported.
Since your struct fields are not capitalized, they do not qualify to be exported to another package. In order to fix this, you need to capitalize the fields you would like to access externally.
It might look something like this:
type Command struct {
Alias string
Command string
Verbose bool
}
Your struct fields needs to be capital for it to accessible outside the package.
type Command struct {
// Our structured data/object for Command
Alias string
Command string
Verbose bool
}