首頁  >  文章  >  後端開發  >  go-redis Eval func傳回值類型,當Lua腳本傳回陣列時

go-redis Eval func傳回值類型,當Lua腳本傳回陣列時

WBOY
WBOY轉載
2024-02-09 08:51:33537瀏覽

go-redis Eval func返回值类型,当Lua脚本返回数组时

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 腳本 runeval 都會傳回 *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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除