我创建了/app/model/todo-item.go文件,如下所示:
package models
import (
"github.com/revel/revel"
)
type TodoItem struct {
Id int64 `db:"id" json:"id"`
Name string `db:"name" json:"name"`
}
func (b *TodoItem) Validate(v *revel.Validation) {
v.Check(b.Name,
revel.ValidRequired(),
revel.ValidMaxSize(25))
}在src/RevelApp/app/controllers/init.go中,我有以下内容(PS,我使用GorpController与MySQL交互):
func defineTodoItemTable(dbm *gorp.DbMap){
// set "id" as primary key and autoincrement
t := dbm.AddTable(models.TodoItem{}).SetKeys(true, "id")
t.ColMap("name").SetMaxSize(25)
}我收到了一个错误:,Go代码src/RevelApp/app/controllers/init.go不编译:未定义:模型
我尝试过导入。“RevelApp/ app /model”然后删除了models.TodoItem{}中的模型(如此处描述者:Revel with Gorm "undefined: Page"),我得到了错误:应用程序未能启动revel/:app超时。
这是我唯一能找到的与这个问题有关的联系。我是不是遗漏了什么?
编辑:$GOPATH:
/home/me/Source/go模特位置:
/home/me/Source/go/src/RevelApp/app/models我是如何导入模型包的:
import (
."RevelApp/app/models"
"github.com/revel/revel"
"github.com/coopernurse/gorp"
"database/sql"
_ "github.com/go-sql-driver/mysql"
"fmt"
"strings"
)发布于 2014-11-12 10:44:17
您已经使用点(.)导入限定符导入模型。来自语言规范:
如果一个明确的周期(.)出现而不是名称时,所有包的导出标识符都将在当前文件的文件块中声明,并且可以在没有限定符的情况下访问。
这意味着您不需要使用models.TodoItem。您可以简单地使用TodoItem。
那就是说..。我建议避免这样做,并从import语句中删除点:
import (
"RevelApp/app/models"
"github.com/revel/revel"
"github.com/coopernurse/gorp"
"database/sql"
_ "github.com/go-sql-driver/mysql"
"fmt"
"strings"
)为什么?它阻止本地文件范围变得拥挤,并允许您查看每个对象实际驻留的位置。
为了完整(而且您可能想知道点是相似的),mysql package语句前面的下划线(mysql)基本上是“导入这个包.但是我不需要直接在其中使用任何东西”。这会激发包init函数,允许它向database/sql包例程注册自己。这就是为什么当您使用sql.DB类型时,它最终会被路由到MySql包代码。
https://stackoverflow.com/questions/26883152
复制相似问题