【问题标题】:How to remove duplicate ORM instantiation in Golang Beego如何在 Golang Beego 中删除重复的 ORM 实例化
【发布时间】:2015-01-12 18:52:45
【问题描述】:

在 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()
}

但我在控制台中遇到 undefined o 错误

【问题讨论】:

  • 作为参数传入? ...这个问题需要一些实质内容。是什么阻止您将其作为参数传递?
  • @SimonWhitehead 我可以这样做,所以我在每个模型函数中指定了额外的参数,但我不确定这是否是一个好的解决方案,因为我需要为每个模型调用进行依赖注入
  • 这个 init() 方法在哪里?什么文件?

标签: go beego


【解决方案1】:

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

您也不能为此使用简写 := 初始化 - 它必须是显式的。

因此它必须是这样的:

var o orm.Ormer

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

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

【讨论】:

  • 什么时候调用?我可以从任何控制器访问这个变量吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
相关资源
最近更新 更多