Karena Redis tidak memiliki konsep nilai waktu, maka tidak masuk akal bagi driver generik seperti redigo untuk melakukan beberapa konversi otomatis antara time.Time bawaan. ketik dan array byte arbitrer. Karena itu, pemrogram harus memutuskan bagaimana melakukan konversi tersebut.
Misalnya, Andaikan Anda memiliki tipe "Orang" yang didefinisikan seperti itu, termasuk created_at stempel waktu yang diformat sebagai RFC3339 (bentuk ISO 8601), Anda dapat menentukan jenis "Stempel Waktu" khusus dengan metode "RedisScan" sebagai berikut:
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)