2016-03-22 5 views
0

Ich habe eine Struktur Quote in Gogo - Get Zeit von RethinkDB

type Quote struct{ 
    CreatedAt int64 `gorethink:"createdAt"` 
    // Other fields... 
} 

Ich schreibe Daten von RethinkDB abzufragen und erfolgreich zu sein

result,err:=r.Table("quote").GetAll(ids...).Run(session) 

defer result.Close() 

     if err!=nil{ 
      fmt.Println(err) 
     } 
     var quotes []Quote 
     err=result.All(&quotes) 

Es stimmt Ergebnisse bekommt, aber keine Aufzeichnungen hat Wert in CreatedAt Feld. Das Zeitformat ich für createdAt in der Datenbank verwenden, ist Millisekunden seit Epoche UTC, beabsichtige ich, sie als Nummer verwenden zu berechnen nach

I GoDocs für Zeit gelesen und gefunden:

func (t Time) Unix() int64

Also dachte ich int64 wäre der richtige Typ für CreatedAt, aber es hat nicht funktioniert. Was soll ich machen? Wie kann ich Zeitdaten bekommen?

time.Time funktioniert nicht so gut. Wenn time.Time verwendet wird, ist das Ergebnis immer 0001-01-01 00:00:00 +0000 UTC (ähnlich 0 Wert, wenn auf Millisekunden umgewandelt)

Denn wenn ich den gleichen Server in NodeJS baute ich Date.Now() verwendet, ich brauche eine gleichwertige Art in diesem Fall zu suchen, die eine zurück Nummer für mich später Prozess zu berechnen

Antwort

0

Ich habe es geschafft, die Antwort selbst zu finden. True Type in diesem Zustand verwendet wird, ist float64 so ergibt sich, dass geholt Spiel mit in Datenbank-Explorer (zum Beispiel 1458184908597 Millisekunden)

3

Bei der Verwendung von gorethink wird der Treiber automatisch zu und von GO nativen Datentypen konvertieren. Ändern Sie Ihre Struktur time.Time zu verwenden:

type Quote struct{ 
    CreatedAt time.Time `gorethink:"created_at"` 
} 

Weitere Proben können Sie die jeweiligen test cases überprüfen.

+0

Bevor ich beschlossen Typ 'int64' zu ändern, erklärte ich es mit Typ' time.Time' und es hat nicht funktioniert. Jetzt funktioniert es definitiv nicht mehr – necroface

+0

Ergebnis ist immer '0001-01-01 00:00:00 +0000 UTC' (wenn in Millisekunden konvertiert, ist es '0') – necroface

+0

wenn Sie mit der Zeit arbeiten verwenden Sie Zeit. Zeit, wenn Sie die ms davon möchten, würden Sie etwas tun wie 'Quote.CreatedAt.Unix()' beachten Sie, dass das 'func (t Time) Unix() int64' eine Funktion von ('time.Time') mit dem ist Name 'Unix (keine Parameter)' und gibt 'int64' zurück – gabeio