如何在Golang Beego中删除重复的ORM实例化

时间:2015-01-12 09:51:08

标签: go beego

在Golang应用程序模型中

我在下面:

func AddClub(name string) int64 {
    o := orm.NewOrm()
    club := Club{Name: name}

    id, err := o.Insert(&club)
    if err != nil {
        fmt.Printf("Id: %s, Error: %s", id, err)
    }

    return id
}

然后在下面:

func GetAllClubs() []*Club {
    o := orm.NewOrm()

    var clubs []*Club
    num, err := o.QueryTable("clubs").All(&clubs)
    if err != nil {
        fmt.Printf("Returned Rows Num: %s, %s", num, err)
    }
    return clubs
}

我想删除o := orm.NewOrm()实例化的重复。我该怎么做?

我试图把它作为init() func的一部分,如下所示:

func init() {
  o := orm.NewOrm()
}

但是我在控制台

中得到了未定义的错误

1 个答案:

答案 0 :(得分:1)

如果你想定义一个可用于整个包的变量,你需要在包级别声明它(如果你不打算注入它)。也就是说,在任何功能之外。

您也不能使用简写:=初始化 - 它必须是明确的。

因此它必须是:

var o orm.Ormer

func init() {
    o = orm.NewOrm()
}

请注意,它是在函数外部声明的,并且它不使用速记初始化和赋值运算符:=