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
在函数返回时运行。如果您在那里延迟
,会话将在使用前关闭;为什么要尝试使用延迟?如果某个函数超出了某个函数的作用域,则不能使用它。马上,谢谢