首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >beego中的golang单件

beego中的golang单件
EN

Stack Overflow用户
提问于 2014-06-01 23:19:41
回答 3查看 913关注 0票数 1

我正在尝试Golang和Beego。我来自Java/Spring背景,在为我正在开发的for应用程序实现单例模式时,我遇到了一些困难。我有一个控制器(我想成为一个单例),我在我的控制器中有一个服务(我也想成为一个单例)。我想,如果我让我的服务成为一个指针,那么我将总是使用相同的地址(单例)。事实证明这不是真的。

我的路线看起来像这样

代码语言:javascript
复制
beego.Router("/", &controllers.SessionController{}, "get:Login")

我的SessionController看起来像这样

代码语言:javascript
复制
type SessionController struct {
    baseController
    userService *services.UserService
}

func (this *SessionController) Prepare() {
    this.baseController.Prepare()

    if this.userService == nil {
        beego.Info("user service was nil")
        this.userService = factories.NewUserService()
    }
}

我的日志总是显示每次请求时用户服务都是空的。如何使用我的用户服务的单个(仅初始化一次)实例获取控制器的单个实例?

EN

回答 3

Stack Overflow用户

发布于 2014-06-02 01:17:42

使用户服务成为单例:

代码语言:javascript
复制
var globalUserService = factories.NewUserService()

type SessionController struct {
    baseController
    userService *services.UserService
}

func (this *SessionController) Prepare() {
    this.baseController.Prepare()

    if this.userService == nil {
        beego.Info("user service was nil")            
        this.userService = globalUserService
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-06-02 11:08:36

Beego框架的一个创建者向我提到,框架为每个请求创建一个新的控制器实例,因此不可能创建一个单例:(

票数 2
EN

Stack Overflow用户

发布于 2017-10-17 02:35:36

以下是在Golang中创建单例所需了解的所有内容

Singleton Pattern in Go

代码语言:javascript
复制
var instance *singleton

func GetInstance() *singleton {
    if instance == nil {
        instance = &singleton{}   // <--- NOT THREAD SAFE
    }
    return instance
}

但这不是线程安全的,您需要使用Sync once示例:

代码语言:javascript
复制
import (
    "sync"
) 

type singleton struct {
}

var instance *singleton
var once sync.Once

func GetInstance() *singleton {
    once.Do(func() {
        instance = &singleton{}
    })
    return instance
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23981330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档