对所有文件使用package main,仍然说undefined

时间:2016-04-17 19:20:14

标签: go

我目前有3个文件,它们顶部都有package main

GOPATH/src/example.com/myweb/main.go
GOPATH/src/example.com/myweb/api.go
GOPATH/src/example.com/myweb/viewmodels/home.go

当我编译时,我收到错误:

./main.go:21: undefined: Home
./main.go:39: api.Home undefined (type API has no field or method Home)

我正在编译:

go build

如果我这样做:

go build main.go api.go viewmodels/home.go

它没有说这样的文件或目录,然后是一个文件的路径,它不会出现这样的情况。存在:

GOPATH/src/example.com/myweb/viewmodels.main.go

如果我使用的是package main,那么这应该与go build一起使用吗?

1 个答案:

答案 0 :(得分:1)

您不能在一个目录中混合使用两个不同的包。每个目录都是自己的包。

go文档(请参阅:golang.org/doc/code.html)说明了与您的情况相关的软件包:

  
      
  • 每个包由一个目录中的一个或多个Go源文件组成。
  •   
  • 程序包目录的路径决定了其导入路径。
  •   

您的问题的解决方案是:

  1. package viewmodels用于$GOPATH/src/example.com/myweb/viewmodels/home.go
  2. package main用于$GOPATH/src/example.com/myweb/main.go$GOPATH/src/example.com/myweb/api.go
  3. 使用import "example.com/myweb/viewmodels"包将viewmodels添加到文件中(例如main.go,api.go)
  4. 您的项目看起来像这样:

    Screenshot of the possible project structure with a main package and a viewmodels package in a sub-directory