昨天我們聊到了docking與open,其實這讓我想起星際效應cooper駕駛著登陸小艇嘗試與母艦對接的場景,對接完成後(register),打開艦艇(open)然後就可以做我們想做的事了,這一節就是要來寫他能做什麼
開啟通道後我們要趕快衝到指揮中心下達我們的指示
Conn 是一個數據庫連接的介面定義,它定義了一些方法來與數據庫進行交互。這些方法包括 Prepare、Close 和 Begin,分別用於創建預處理語句、關閉連接和開始一個新的事務
type Conn interface {
Prepare(query string) (Stmt, error)
Close() error
Begin() (Tx, error)
}
我們來一一細看
prepare就像是航母的作戰中心,這個作戰中心在出發前會先制定一些核心的行動步驟,但會先預留一些"待定因素"或"變數"來應對未來可能發生的不確定情況,這些變數,在go裡面我們稱為占位符,他們在計畫初步階段不會被填滿,會流者空白,等到時候實際作戰時可以快速被使用
例如,計劃可能包含以下步驟:
在這裡,[X]、[Y]、和 [Z]就是預留的填空,就像是go的占位符,在制定這些計畫時,可能還不清楚具體的數值或行動,這些占位符會在計劃執行的過程中,根據實際的情況和需要,被具體的位置、敵方行動和我方策略替換
prepare就是做這件事,Prepare
方法創建預處理的 SQL 語句時,開發者可能會留下一些占位符,這些占位符將在語句被多次執行時,被不同的參數值替換
INSERT INTO soldiers (name, rank, location) VALUES (?, ?, ?)
在這個 SQL 語句中,三個問號就是占位符,它們在執行語句時會被具體的值(例如,士兵的名字、軍階和位置)替換
當一場作戰結束時,作戰指揮中心會進行一系列的結束流程,包括撤回部隊、關閉臨時設立的前線指揮部、保存或銷毀敏感資料,以及斷開與前線的通訊連接。這些步驟確保了作戰的有序結束,並防止了可能的資訊洩露或未來的安全風險。
例如,作戰結束的流程可能包括:
func (c *Conn) Close() error
當軍隊開始一場作戰時,會有一個明確的開始點,這個開始點涉及到多個環節的協同工作,例如動員部隊、設立通訊、確保補給線等。從這個時刻開始,所有的行動和資源都會被協調和監控,以確保作戰目標的達成
例如,開始一場作戰可能包括:
func (c *Conn) Begin() (Tx, error)
當你調用Begin方法時,你告訴數據庫:“我要開始一個新的事務(Transaction)了。” 這個事務會從這個點開始,追蹤所有的數據操作(如插入、更新或刪除),直到事務被提交(Commit)或回滾(Rollback)。在事務期間,數據庫會確保所有的操作要麼全部成功,要麼在發生錯誤時全部不產生效果