+++ title = "ObjectID" name = "objectid" repository = "https://git.neonxp.ru/objectid.git" description = "Генерация ObjectID на основе даты. Глобально уникальные." gomod = true +++ Простая библиотека для генерации псевдослучайных глобально уникальных идентификаторов. Полученные идентификаторы реализуют функцию сравнения, таким образом поддаются сортировке. Так же из идентификатора можно получить время его генерации, а так же порядковый номер генерации в пределах сессии. Счетчик используемый при генерации идентификаторов потокобезопасный. ## 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 Примеры ```go 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 ```