Будет ли MongoDB Go Driver автоматически конвертировать 'uint64' в тип bson? Ошибка переполнения возвращена - PullRequest
0 голосов
/ 04 марта 2020

Как видно из заголовка, у меня есть структура, определенная в поле uint64 , но возвращается ошибка, когда я устанавливаю его значение как math.MaxUint64 .

Это мой код:

type MyDoc struct {
    Number    uint64 `bson:"_id"`
    Timestamp int64  `bson:"time"`
}

// I just want to know whether uint64 overflows or not.
func main() {
    mydoc := &MyDoc{
        Number: math.MaxUint64,
        Timestamp: time.Now().UnixNano(),
    }

    v, err := bson.Marshal(mydoc)
    if err != nil {
        panic(err)
    }
    fmt.Println(v)
}

После выполнения ошибка следующая:

panic: 18446744073709551615 overflows int64 [recovered]
    panic: 18446744073709551615 overflows int64

Очевидно, uint64 типы данных обрабатываются как int64 чего я не ожидаю.

Итак, как хранить данные uint64, но не переполнять их в MongoDB ?? Вместо этого я не могу использовать строковый тип, потому что мне нужно сравнить размер числа для сортировки документов.

Я использую официальный драйвер MongoDB Go Драйвер.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...