2015-12-03 42 views
-1

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

type MyType struct { 
    session *gocql.Session 
} 

我附加了* gocql.Session的一个实例,它应该与结构一样长。

func (this *myType) function_one_using_the_session(){} 
func (this *myType) function_two_using_the_session(){} 

我发现thisruntime.SetFinalizer(a, func(a *Test) { fmt.Println("I AM DEAD") })

我可能会做,或写我自己的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 
} 
+0

“set/call defer”是什么意思?这没有多大意义。也许这个链接可以为你澄清一些事情:https://blog.golang.org/defer-panic-and-recover – HectorJ

+0

你能描述一下你到底想要达到什么吗 – MIkCode

+1

不要使用'SetFinalizer',因为它会关闭你的会议在不可预知的时间,或者它可能永远不会关闭你的会话。从文档中可以看出:'典型的使用场景是让一个全局会话对象与整个Cassandra集群进行交互。' – JimB

回答

1

您可以利用上下文来进行设置卡桑德拉会议撰写你的处理程序,使用它,并释放之后,将其返回到您的会话池。

看看to this blog post关于如何组织到数据库服务的访问。

+0

正确的 - 谢谢你 –

+0

=),不知道为什么你有这么多downvotes tho。 –