使用结构成员代替结构本身

So this is related to tarm's Go Serial Package.

I was trying to use it to read a ' ' terminated string from serial. While it doesn't have this as a built in function, I found this answer and got things working from there (using a scanner on the created port with a custom split function).

Now my question is exactly that, why does this work? The port stuct is as follows (from the package source code):

type Port struct {
    // We intentionly do not use an "embedded" struct so that we
    // don't export File
    f *os.File
}

So the file pointer is only a field of the Port type, It's not embedded or anything.

But the following code works:

func handler(port *serial.Port) {

    scanner := bufio.NewScanner(port)

    scanner.Split(scanMessageLine)

    for {

        scanner.Scan()

        messageBytes := scanner.Bytes()
    }
}

How am I able to create a Scanner, which requires the io.Reader interface with the port; While its only a member of port that implements the interface, not port itself?

Also, the code completion in Webstorm (I use it with the Golang plugin) suggests the functions on f as direct members of port, but if I println the port stuct instance it just contains a pointer?

Just to eliminate the IDE doing something weird I built the program from the command line and it still works.

Is there some fancy pointer voodoo I'm missing here? Or a is it a commonly used Golang feature? Is there a provision for a stuct with a single member to expose it's member's methods directly? Even if it isn't embedded?

Since its entirely possible that I've completely misunderstood this whole interface thing, if there's some nice in depth material that you guys suggest I should read, I'd love to do that. Considering how interfaces are all over the place in go, I want to understand them properly.

Port has method Read(b []byte) (n int, err error) thus it implements io.Reader.

See the source.