No description
- Go 100%
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| non_negative_integer.go | ||
| non_negative_integer_test.go | ||
| README.md | ||
Пакет go-nonnegativeinteger
Пакет go-nonnegativeinteger предоставляет тип NonNegativeInteger для работы с неотрицательными целыми числами в Go с поддержкой сериализации/десериализации в JSON, XML и YAML.
Особенности
- Тип
NonNegativeIntegerгарантирует неотрицательные значения (0 и положительные целые числа) - Поддержка сериализации в форматы:
- JSON
- XML
- YAML
- Полная валидация входных значений
- Юнит-тесты с 100% покрытием функционала
Установка
go get git.ymnuktech.ru/ymnuk/go-nonnegativeinteger
Использование
Импорт пакета
import (
"git.ymnuktech.ru/ymnuk/go-nonnegativeinteger"
// или с псевдонимом
nni "git.ymnuktech.ru/ymnuk/go-nonnegativeinteger"
)
Создание значения
// Создание с помощью конструктора (рекомендуется)
val, err := nonnegativeinteger.NewNonNegativeInteger(10)
if err != nil {
// обработка ошибки (если значение отрицательное)
}
// Прямое создание (если уверены в значении)
var directVal nonnegativeinteger.NonNegativeInteger = 5
Работа с JSON
// Маршалинг
data, err := json.Marshal(val)
// Анмаршалинг
var newVal nonnegativeinteger.NonNegativeInteger
err := json.Unmarshal([]byte(`"15"`), &newVal)
Работа с XML
type Example struct {
XMLName xml.Name `xml:"example"`
Value nonnegativeinteger.NonNegativeInteger `xml:"value"`
}
// Маршалинг
e := Example{Value: 7}
data, err := xml.Marshal(e)
// Анмаршалинг
var e Example
err := xml.Unmarshal([]byte(`<example><value>3</value></example>`), &e)
Работа с YAML
// Маршалинг
data, err := yaml.Marshal(val)
// Анмаршалинг
var newVal nonnegativeinteger.NonNegativeInteger
err := yaml.Unmarshal([]byte("8"), &newVal)
Примеры
Основное использование
package main
import (
"encoding/json"
"fmt"
"log"
"git.ymnuktech.ru/ymnuk/go-nonnegativeinteger"
)
func main() {
// Создаем значение
nni, err := nonnegativeinteger.NewNonNegativeInteger(42)
if err != nil {
log.Fatal(err)
}
// Маршалинг в JSON
jsonData, _ := json.Marshal(nni)
fmt.Println("JSON:", string(jsonData)) // JSON: 42
// Анмаршалинг из JSON
var newNni nonnegativeinteger.NonNegativeInteger
if err := json.Unmarshal([]byte("10"), &newNni); err != nil {
log.Fatal(err)
}
fmt.Println("Value:", newNni) // Value: 10
// Попытка создать отрицательное значение
_, err = nonnegativeinteger.NewNonNegativeInteger(-5)
if err != nil {
fmt.Println("Error:", err) // Error: value must be non-negative
}
}
Использование в структурах
type User struct {
ID nonnegativeinteger.NonNegativeInteger `json:"id"`
Name string `json:"name"`
Age nonnegativeinteger.NonNegativeInteger `json:"age"`
}
func main() {
user := User{
ID: 1001,
Name: "John Doe",
Age: 30,
}
// Сериализация в JSON
jsonData, _ := json.Marshal(user)
fmt.Println(string(jsonData))
// {"id":1001,"name":"John Doe","age":30}
// Десериализация из JSON
var newUser User
jsonStr := `{"id":1002,"name":"Jane Smith","age":25}`
if err := json.Unmarshal([]byte(jsonStr), &newUser); err != nil {
log.Fatal(err)
}
fmt.Printf("User: %+v", newUser)
// User: {ID:1002 Name:Jane Smith Age:25}
}
Тестирование
Для запуска тестов:
go test -v
Тесты покрывают:
- Создание значений (положительные, нулевые, отрицательные)
- Сериализацию/десериализацию в JSON
- Сериализацию/десериализацию в XML
- Сериализацию/десериализацию в YAML
- Обработку ошибок при недопустимых значениях
- Граничные случаи
Зависимости
- Стандартная библиотека Go
- gopkg.in/yaml.v3 для работы с YAML
Лицензия
Этот проект лицензирован по лицензии MIT - см. файл LICENSE для деталей.