在Go 的context 套件中,你可以使用WithValue() 函數將鍵值對加到上下文中,它傳回一個帶有新增的對的新上下文。但是,如果您需要將多個鍵值對傳遞給上下文呢?
選項1:多次呼叫WithValue()
您可以呼叫WithValue()多次,每次將新上下文作為第一個參數傳遞:
import ( "context" ) func main() { // Create a background context. ctx := context.Background() // Add key-value pairs one by one. ctx = context.WithValue(ctx, "key1", "value1") ctx = context.WithValue(ctx, "key2", "value2") }
選項2:使用資料結構
如果需要新增多個鍵-值對,使用單一資料結構來保存它們會更有效。然後,您可以使用WithValue() 將整個資料結構加入上下文:
type MyStruct struct { Key1 string Key2 string } func main() { // Create a context. ctx := context.Background() // Create a data structure. data := MyStruct{ Key1: "value1", Key2: "value2", } // Add the data structure to the context. ctx = context.WithValue(ctx, "mydata", data) }
選項3:混合解決方案
您也可以使用混合方法,您可以在其中建立一個包含鍵值對映射的包裝器結構。然後,您可以將包裝器結構體添加到上下文中:
type MyWrapper struct { m map[string]string } func (w *MyWrapper) Get(key string) string { return w.m[key] } func main() { // Create a context. ctx := context.Background() // Create a wrapper struct. wrapper := MyWrapper{ m: map[string]string{ "key1": "value1", "key2": "value2", }, } // Add the wrapper struct to the context. ctx = context.WithValue(ctx, "mywrapper", wrapper) }
結論
使用方法將取決於特定的用例和效能要求。如果您需要以最小的開銷添加少量鍵值對,可以使用選項 1。如果考慮效能,您可能需要使用選項 2 或選項 3。
以上是如何在 Go 中將多個鍵值對傳遞到上下文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!