Простая библиотека для генерации псевдослучайных глобально уникальных идентификаторов. Полученные идентификаторы реализуют функцию сравнения, таким образом поддаются сортировке. Так же из идентификатора можно получить время его генерации, а так же порядковый номер генерации в пределах сессии. Счетчик используемый при генерации идентификаторов потокобезопасный.
API
`go package objectid // import "neonxp.ru/go/objectid"`
Функции
`go func Seed()` необходимо вызвать в начале сессии
`go func New() ID` возвращает новый идентификатор
`go func FromString(s string) (ID, error)` возвращает идентификатор из base64 представления
`go func FromTime(t time.Time) ID` возвращает идентификатор на основе переданного времени
Типы и методы
`go type ID []byte` тип представляющий собой идентификатор
`go func (i ID) Counter() uint64` возвращает порядковый номер идентификатора в сессии
`go func (i ID) Less(i2 ID) bool` возвращает true если i2 > i
`go func (i ID) MarshalJSON() ([]byte, error)` формирует json представление идентификатора
`go func (i ID) String() string` возвращает base64 представление идентификатора
`go func (i ID) Time() time.Time` возвращает время создания идентификатора
`go func (i *ID) UnmarshalJSON(b []byte) error` парсит идентификатор из json
Примеры
import "neonxp.ru/go/objectid" objectid.Seed() id1 := objectid.New() fmt.Printf("Идентификатор сгенерированный сегодня: %s в %s\n", id1, id1.Time()) // пример: Идентификатор сгенерированный сегодня: AAXwV/DVGwXtTj0FRm92SQF3MiquMPlK в 2022-12-21 18:09:36.872197 +0300 MSK id2 := objectid.FromTime(time.Now().Add(-24 * time.Hour)) fmt.Printf("Идентификатор сгенерированный вчера: %s в %s\n", id2, id2.Time()) // пример: Идентификатор сгенерированный вчера: AAXwQ+U14N8mbGoVPiiNqyZCss7lEV0Z в 2022-12-20 18:14:42.541791 +0300 MSK r := "id2 > id1" if id2.Less(id1) { r = "id2 < id1" } fmt.Print(r) // выведет: id2 < id1 ``