php小編西瓜在這裡為大家介紹一下關於go-redis函式庫中Eval函數的回傳值類型的問題。當使用Lua腳本執行Eval函數時,有時腳本回傳的是一個陣列。那麼在go-redis函式庫中,這個回傳值的型別是什麼呢?下面我們就來詳細解答一下這個問題。
當lua腳本在eval呼叫期間傳回一個表格陣列時,如何將其轉換為go中的[]字串?
redis cli 按以下格式傳回大量回覆。
1) val1 2) val2
go-redis eval 函數會將批次條目傳回為
["val1", "val2"]
redis 將 lua 表陣列傳回為 resp2 陣列。然後,go 用戶端會將該回應對應到 go 本機類型。 go-redis
的相關文件可以在這裡找到: lua和 go 類型。
簡單地說,lua 表確實會對應到批次回复,而 go 客戶端將其對應到介面片段:[]interface{}
。
go-redis
腳本 run
和 eval
都會傳回 *cmd
。您可以使用此類型的方法來檢索 go 類型的輸出。 result
給出(interface{}, error)
,您可以鍵入斷言任何您想要的內容,否則stringslice
是一個方便的getter,可以立即檢索[]string
。
所以看起來像:
script := redis.NewScript(` local foo = {"val1", "val2"} return foo `) cmd := script.Run(/* parameters */) i, err := cmd.Result() // (interface, error) // or ss, err := cmd.StringSlice() // ([]string, error)
如果這些值實際上並非都是字串,請使用 slice
取得 []interface{}
切片,然後單獨檢查元素。
以上是go-redis Eval func傳回值類型,當Lua腳本傳回陣列時的詳細內容。更多資訊請關注PHP中文網其他相關文章!