Popularity
3.0
Stable
Activity
0.0
Stable
46
3
7
Programming language: Go
License: MIT License
Tags:
Go Generate Tools
Latest version: v2.2.1
generic alternatives and similar packages
Based on the "Go Generate Tools" category.
Alternatively, view generic alternatives based on common mentions on social networks and blogs.
-
xgen
XSD (XML Schema Definition) parser and Go/C/Java/Rust/TypeScript code generator -
re2dfa
Transform regular expressions into finite state machines and output Go source code. This repository has migrated to https://gitlab.com/opennota/re2dfa
Clean code begins in your IDE with SonarLint
Up your coding game and discover issues early. SonarLint is a free plugin that helps you find & fix bugs and security issues from the moment you start writing code. Install from your favorite IDE marketplace today.
Promo
www.sonarlint.org
Do you think we are missing an alternative of generic or a related project?
README
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:
package main
import (
"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:
package main
import (
"fmt"
"github.com/usk81/generic"
)
func main() {
v := 1.0
var 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
Author
*Note that all licence references and agreements mentioned in the generic README section above
are relevant to that project's source code only.