Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/usk81/generic
flexible data type for Go
https://github.com/usk81/generic
flexible-data generic go golang marshaller types
Last synced: 3 months ago
JSON representation
flexible data type for Go
- Host: GitHub
- URL: https://github.com/usk81/generic
- Owner: usk81
- License: mit
- Created: 2016-06-15T14:00:36.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2021-01-13T20:33:15.000Z (almost 4 years ago)
- Last Synced: 2024-06-21T00:20:22.001Z (5 months ago)
- Topics: flexible-data, generic, go, golang, marshaller, types
- Language: Go
- Size: 109 KB
- Stars: 48
- Watchers: 3
- Forks: 7
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go - generic - flexible data type for Go - ★ 22 (Go Generate Tools)
- awesome-go-extra - generic - 06-15T14:00:36Z|2021-01-13T20:33:15Z| (Go Generate Tools / Routers)
README
# Generic
[![go.dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/usk81/generic)
[![License](http://img.shields.io/badge/license-mit-blue.svg?style=flat-square)](https://github.com/usk81/generic/blob/master/LICENSE)
![](https://github.com/usk81/generic/workflows/preliminary%20review/badge.svg)
[![codecov](https://codecov.io/gh/usk81/generic/branch/master/graph/badge.svg)](https://codecov.io/gh/usk81/generic)
[![Go Report Card](https://goreportcard.com/badge/github.com/usk81/generic)](https://goreportcard.com/report/github.com/usk81/generic)flexible data type for Go
support: Go 1.12+
## Install
standard `go get`:
```
go get -u github.com/usk81/generic/v2
```## Usage
encode/decode:
```go
package mainimport (
"encoding/json"
"github.com/usk81/generic/v2"
)type User struct {
Name String `json:"name"`
Age generic.Int `json:"age"`
}var user1 User
u1 := []byte(`{"name":"Daryl Dixon","age":"40"}`)
json.Unmarshal([]byte(u1), &user1)
b, _ := json.Marshal(user1)
Println(string(b))
// {"name":"Daryl Dixon","age":40}var user2 User
u2 := []byte(`{"name":"Rick Grimes"}`)
json.Unmarshal([]byte(u2), &user2)
b, _ := json.Marshal(user2)
Println(string(b))
// {"name":"Rick Grimes","age":null}
```set:
```go
package mainimport (
"fmt"
"github.com/usk81/generic"
)func main() {
v := 1.0var tb generic.Bool
tb.Set(v)
vb := tb.Weak()
fmt.Printf("%v, (%T)\n", vb, vb)
// true, (bool)var tf generic.Float
tf.Set(v)
vf := tf.Weak()
fmt.Printf("%v, (%T)\n", vf, vf)
// 1, (float64)var ti generic.Int
ti.Set(v)
vi := ti.Weak()
fmt.Printf("%v, (%T)\n", vi, vi)
// 1, (int64)var ts generic.String
ts.Set(v)
vs := ts.Weak()
fmt.Printf("%v, (%T)\n", vs, vs)
// 1, (string)var tt generic.Time
tt.Set(v)
vt := tt.Weak()
fmt.Printf("%v, (%T)\n", vt.UTC(), vt)
// 1970-01-01 09:00:01 +0900 JST, (time.Time)var tu generic.Uint
tu.Set(v)
vu := tu.Weak()
fmt.Printf("%v, (%T)\n", vu, vu)
// 1, (uint64)
}
```## Benchmarks
### Marshal
#### Bool
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 5000000 | 240 ns | 185 | 3 |
| 2.0.0 | 200000000 | 6.69 ns | 0 | 0 |#### Float
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 3000000 | 425 ns | 192 | 3 |
| 2.0.0 | 5000000 | 260 ns | 64 | 3 |#### Int
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 5000000 | 265 ns | 192 | 3 |
| 2.0.0 | 20000000 | 70.5 ns | 16 | 2 |#### String (small)
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 3000000 | 382 ns | 200 | 3 |
| 2.0.0 | 20000000 | 89.0 ns | 128 | 2 |#### String (Large)
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 1000000 | 1056 ns | 776 | 4 |
| 2.0.0 | 5000000 | 237 ns | 896 | 2 |#### Time
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 1000000 | 1122 ns | 360 | 5 |
| 2.0.0 | 3000000 | 401 ns | 48 | 1 |#### TimestampMS
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 20000000 | 97.9 ns | 32 | 2 |
| 2.0.0 | 20000000 | 91.2 ns | 32 | 2 |#### TimestampNano
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 10000000 | 114 ns | 64 | 2 |
| 2.0.0 | 10000000 | 112 ns | 64 | 2 |#### Timestamp
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 20000000 | 88.4 ns | 32 | 2 |
| 2.0.0 | 20000000 | 86.7 ns | 32 | 2 |#### Uint
| version | requests | /op | B/op | allocs/op |
|---|---|---|---|---|
| 1.0.0 | 5000000 | 277 ns | 192 | 3 |
| 2.0.0 | 20000000 | 64.2 ns | 16 | 2 |## Licence
[MIT](https://github.com/usk81/generic/blob/master/LICENSE)
## Author
[Yusuke Komatsu](https://github.com/usk81)