diff options
Diffstat (limited to 'content/go/objectid.md')
-rw-r--r-- | content/go/objectid.md | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/content/go/objectid.md b/content/go/objectid.md new file mode 100644 index 0000000..b668d92 --- /dev/null +++ b/content/go/objectid.md @@ -0,0 +1,74 @@ ++++ +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 +``` |