在另一个文件中进入公共结构

I'm very new with GO and don't understand some basics - so I'm really don't know how to ask ask google about it. So I have a project with 2 files, both in package main - the root of src. One file is main.go

package main

var (
    node * NodeDTO
)

func main() {
    node = &NodeDTO{ID: 1}
}

And another is dto.go with

package main

type NodeDTO struct {
    ID int
}

So main.go tells me - "undefined: NodeDTO". But if I create a dir dto near of main.go and use my NodeDTO from there like

package main

import "another_tcp_server/dto"

var (
    node * dto.NodeDTO
)

func main() {
    node = &dto.NodeDTO{ID: 1}
}

It's ok. Please tell me why this happen?

You appear to have:

$ ls
dto.go  main.go
$ cat main.go
package main

var (
    node * NodeDTO
)

func main() {
    node = &NodeDTO{ID: 1}
}
$ cat dto.go
package main

type NodeDTO struct {
    ID int
}
$ 

and you appear to run:

$ go run main.go
# command-line-arguments
./main.go:4:12: undefined: NodeDTO
./main.go:8:13: undefined: NodeDTO
$

The help for go run says, amongst other things:

$ go help run
usage: go run [build flags] [-exec xprog] package [arguments...]

Run compiles and runs the named main Go package.
Typically the package is specified as a list of .go source files,
but it may also be an import path, file system path, or pattern
matching a single known package, as in 'go run .' or 'go run my/cmd'.

You used a list of .go source files: go run main.go. You listed one file. You have two files: main.go and dto.go.

Use a complete list of .go source files:

$ go run main.go dto.go
$