Go 在结构(析构函数)变量上设置延迟的位置

Go 在结构(析构函数)变量上设置延迟的位置,go,Go,我有一个带有数据库会话变量的结构。我应该在哪里设置/调用此延迟-像构造函数/析构函数一样 type MyType struct { session *gocql.Session } 我正在附加一个*gocql.Session的实例,它应该和结构一样长 func (this *myType) function_one_using_the_session(){} func (this *myType) function_two_using_the_session(){} 我发现:r

我有一个带有数据库会话变量的结构。我应该在哪里设置/调用此延迟-像构造函数/析构函数一样

type MyType struct {
    session    *gocql.Session
}
我正在附加一个*gocql.Session的实例,它应该和结构一样长

func (this *myType) function_one_using_the_session(){}
func (this *myType) function_two_using_the_session(){}
我发现:
runtime.SetFinalizer(a,func(a*Test){fmt.Println(“我死了”)}

我可能会这样做,或者编写自己的
Close()
函数

这可能会奏效-欢迎其他评论

我试着只使用这么多的会话。但我是否应该在以下功能中推迟会话:

    func GetSession() *gocql.Session {
        if cluster == nil {
            cluster = gocql.NewCluster("ip")
            cluster.Keyspace = "Keyspace"
            session, _ = cluster.CreateSession()
            return session
        } else {
            session, _ = cluster.CreateSession()
            // defer session.Close()
            }
    return session
}

您可以使用用于设置Cassandra会话的上下文编写处理程序,使用它并在之后释放,然后将其返回到会话池


看看如何组织您对DB服务的访问。

您所说的“设置/呼叫延迟”是什么意思?这没有多大意义。也许这个链接可以为您澄清一些事情:您能描述一下您正试图实现的目标吗不要使用
SetFinalizer
,因为这将在不可预知的时间关闭会话,或者它可能永远不会关闭会话。从文档中可以看出:
典型的使用场景是使用一个全局会话对象与整个Cassandra集群进行交互。你会对我使用GetSession()返回会话的更新发表评论吗?谢谢,听起来您知道这一点:-)
defer
在函数返回时运行。如果您在那里
延迟
,会话将在使用前关闭;为什么要尝试使用
延迟
?如果某个函数超出了某个函数的作用域,则不能使用它。马上,谢谢