flexible data type for Go
support: Go 1.12+
standard go get
:
go get -u github.com/usk81/generic/v2
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)
}
version |
requests |
/op |
B/op |
allocs/op |
1.0.0 |
5000000 |
240 ns |
185 |
3 |
2.0.0 |
200000000 |
6.69 ns |
0 |
0 |
version |
requests |
/op |
B/op |
allocs/op |
1.0.0 |
3000000 |
425 ns |
192 |
3 |
2.0.0 |
5000000 |
260 ns |
64 |
3 |
version |
requests |
/op |
B/op |
allocs/op |
1.0.0 |
5000000 |
265 ns |
192 |
3 |
2.0.0 |
20000000 |
70.5 ns |
16 |
2 |
version |
requests |
/op |
B/op |
allocs/op |
1.0.0 |
3000000 |
382 ns |
200 |
3 |
2.0.0 |
20000000 |
89.0 ns |
128 |
2 |
version |
requests |
/op |
B/op |
allocs/op |
1.0.0 |
1000000 |
1056 ns |
776 |
4 |
2.0.0 |
5000000 |
237 ns |
896 |
2 |
version |
requests |
/op |
B/op |
allocs/op |
1.0.0 |
1000000 |
1122 ns |
360 |
5 |
2.0.0 |
3000000 |
401 ns |
48 |
1 |
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 |
version |
requests |
/op |
B/op |
allocs/op |
1.0.0 |
10000000 |
114 ns |
64 |
2 |
2.0.0 |
10000000 |
112 ns |
64 |
2 |
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 |
version |
requests |
/op |
B/op |
allocs/op |
1.0.0 |
5000000 |
277 ns |
192 |
3 |
2.0.0 |
20000000 |
64.2 ns |
16 |
2 |
MIT
Yusuke Komatsu