Приходит HTTP запрос, формирую строку для сохранения в БД, генерирую уникальный ID так:

```
func NewID() (ulid.ULID, error) {
entropy := rand.New(rand.NewSource(time.Now().UnixNano()))
ms := ulid.Timestamp(time.Now())
return ulid.New(ms, entropy)
}
```

Т.е. ulid.New в качестве энтропии использует рандом у которого в качестве источника энтропии время с наносекундами. Какова вероятность того, что прийдут два запроса в одну наносекунду и возникнет конфликт ID-шников?

Читать далее...
#golang

@Обувь Стадлова
hash + microtime всегда спасают отцов русской демократии

@kostikov hash от запроса? Та может быть, там нагрузки нет - можно и посчитать. Но это не критично, можно и источник энтропии инициализировать один раз, что и выглядит даже правильно.

Я тут скорее просто про свои внутренние переживания по поводу того, то макось не умеет наносекуны считать :) Открытие, однако!