复现问题
首先来看问题是怎么出现的。在gotest
目录下,有testundefined.go
和main.go
文件。其中main.go
文件引用了testundefined.go
中的结构体Test
。编写没有语法错误,但是在运行go run
命令时,却报错:
# command-line-arguments
.\main.go:6:10: undefined: Test
testundefined.go文件:
package main
type Test struct {
Name string
Year int
}
main.go文件:
package main
import "fmt"
func main() {
test := Test{
"benben",
2015,
}
fmt.Println(test)
}
原因查找
既然是在运行go run
命令的时候出错,那么首先来看执行命令的入口。位于$GOPATH/src/cmd/go
目录下的main.go
文件,是命令运行的入口。该文件导入了cmd/go/internal/run
包,那么势必要运行该包下的初始化函数。
func init() {
CmdRun.Run = runRun //