Wdrażam metodę Redisscan (...) , zgodnie z tym, więc odpowiedz błąd skanansowania redigo z czasem. Time.

Moja metoda:

func (t *Timestamp) RedisScan(x interface{}) error {
    bs, ok := x.([]byte)
    if !ok {
        return fmt.Errorf("expected []byte but got %T", x)
    }

    layout := "2006-01-02 15:04:05 -0700 MST"
    parsedTime, err := time.Parse(layout, string(bs))
    if err != nil {
        return err
    } 
    fmt.Println(parsedTime) // 2019-12-10 00:00:00 +0000 UCT
    fmt.Println(Timestamp(parsedTime)) // some gibberish....

    *t = Timestamp(parsedTime)

    return nil
}

A oto mój niestandardowy typ type Timestamp time.Time

Problem polega na tym, że po wydrukowaniu parsedtime wewnątrz mojej metody Redisscan, wyjściami 2019-12-10 00:00:00 +0000 UCT . Ale wydrukować Timestamp (parsedtime) Wyjścia {0 63714211200 0xC0001591A0} . Czy ktoś może mi wyjaśnić, co się tutaj dzieje?

0
Petr Holoubek 12 styczeń 2020, 03:15

1 odpowiedź

Najlepsza odpowiedź

To właśnie oczekiwałbym. Czas A>) Które różne funkcje FMT będą dzwonić (jeśli interfejs został wdrożony). Twój typ znacznika nie wdraża tego, więc surowy struktura jest porzucony.

Czas. Czas jest zdefiniowany jako:

type Time struct {
    wall uint64
    ext  int64
    loc *Location
}

I są to trzy wartości, które widzisz.

Aby to naprawić, możesz użyć czegoś takiego jak fmt.Println(time.Time(parsedTime).Format("2006-01-02 15:04:05 -0700 MST")), wdrożyć ciąg () w znaczniku czasu lub Czas osadzony. Czas w twoim strukturze.

-1
Brits 12 styczeń 2020, 00:44