aboutsummaryrefslogtreecommitdiff
path: root/content/go/objectid.md
blob: b668d92f3a5cc13ffb7f1218b3b975664c10c9bd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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
```