aboutsummaryrefslogtreecommitdiff
path: root/content/go/objectid.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/go/objectid.md')
-rw-r--r--content/go/objectid.md74
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
+```