चूंकि रेडिस के पास समय मूल्यों की कोई अवधारणा नहीं है, इसलिए रेडिगो जैसे जेनेरिक ड्राइवर के लिए बुइलिन time.Time
के बीच कुछ स्वचालित रूपांतरण करने का कोई मतलब नहीं होगा। प्रकार और एक मनमाना बाइट सरणी। जैसे, यह तय करना प्रोग्रामर पर निर्भर है कि उस रूपांतरण को कैसे किया जाए।
उदाहरण के लिए, मान लें कि आपके पास एक "व्यक्ति" प्रकार परिभाषित है, जिसमें एक created_at
शामिल है टाइमस्टैम्प को RFC3339 (ISO 8601 का एक रूप) के रूप में स्वरूपित किया गया है, आप "RedisScan" विधि के साथ एक कस्टम "टाइमस्टैम्प" प्रकार को निम्नानुसार परिभाषित कर सकते हैं:
type Timestamp time.Time
type Person struct {
Id int `redis:"id"`
Name string `redis:"name"`
CreatedAt Timestamp `redis:"created_at"`
}
func (t *Timestamp) RedisScan(x interface{}) error {
bs, ok := x.([]byte)
if !ok {
return fmt.Errorf("expected []byte, got %T", x)
}
tt, err := time.Parse(time.RFC3339, string(bs))
if err != nil {
return err
}
*t = Timestamp(tt)
return nil
}
// ...
response, err := redis.Values(conn.Do("HGETALL", "person:1"))
if err != nil {
panic(err)
}
var p Person
err = redis.ScanStruct(response, &p)
if err != nil {
panic(err)
}
log.Printf("OK: p=%v", p)