2015-12-03 43 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。 –