在单独的golang包中声明结构不能返回值,但是在明确声明时可以返回值

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
}