go get github.com/IncSW/go-bencode
import bencode "github.com/IncSW/go-bencode"
var dict interface{} = map[string]interface{}{
"int": 123,
"string": "Hello, World",
"list": []interface{}{"foo", "bar"},
}
data, err := bencode.Marshal(dict)
if err != nil {
panic(err)
}
fmt.Println(string(data))
// Output:
// d3:inti123e4:listl3:foo3:bare6:string12:Hello, Worlde
data, err := bencode.Unmarshal(value)
Go 1.16, Debian 9.1, i7-7700
Library |
Time |
Bytes Allocated |
Objects Allocated |
Notes |
IncSW/go-bencode |
598.5 ns/op |
512 B/op |
1 allocs/op |
|
cristalhq/bencode |
939.4 ns/op |
928 B/op |
4 allocs/op |
|
marksamman/bencode |
1002 ns/op |
736 B/op |
9 allocs/op |
4 |
aleksatr/go-bencode |
1060 ns/op |
736 B/op |
9 allocs/op |
|
chihaya/chihaya |
1722 ns/op |
1009 B/op |
53 allocs/op |
1 |
lajide/bencode |
1725 ns/op |
1011 B/op |
53 allocs/op |
1 |
nabilanam/bencode |
2865 ns/op |
3192 B/op |
54 allocs/op |
5 |
anacrolix/torrent |
3179 ns/op |
1328 B/op |
25 allocs/op |
|
lwch/bencode |
3340 ns/op |
1792 B/op |
75 allocs/op |
1, 2 |
tumdum/bencoding |
3419 ns/op |
1752 B/op |
60 allocs/op |
|
stints/bencode |
4018 ns/op |
3120 B/op |
100 allocs/op |
1, 2 |
ehmry/go-bencode |
4569 ns/op |
1496 B/op |
33 allocs/op |
|
jackpal/bencode-go |
4702 ns/op |
2016 B/op |
45 allocs/op |
|
zeebo/bencode |
5003 ns/op |
1376 B/op |
33 allocs/op |
|
owenliang/dht |
5180 ns/op |
3279 B/op |
80 allocs/op |
5 |
cuberat/go-bencode |
5589 ns/op |
1929 B/op |
71 allocs/op |
2 |
Library |
Time |
Bytes Allocated |
Objects Allocated |
Notes |
IncSW/go-bencode |
503.0 ns/op |
0 B/op |
0 allocs/op |
|
cristalhq/bencode |
668.4 ns/op |
0 B/op |
0 allocs/op |
|
chihaya/chihaya |
1432 ns/op |
307 B/op |
49 allocs/op |
1 |
lajide/bencode |
1462 ns/op |
307 B/op |
49 allocs/op |
1 |
anacrolix/torrent |
2954 ns/op |
720 B/op |
21 allocs/op |
|
lwch/bencode |
3093 ns/op |
1089 B/op |
71 allocs/op |
1, 2 |
tumdum/bencoding |
3474 ns/op |
1752 B/op |
60 allocs/op |
|
jackpal/bencode-go |
4479 ns/op |
1408 B/op |
41 allocs/op |
|
ehmry/go-bencode |
4650 ns/op |
1528 B/op |
33 allocs/op |
|
cuberat/go-bencode |
5360 ns/op |
1321 B/op |
67 allocs/op |
2 |
Library |
Time |
Bytes Allocated |
Objects Allocated |
Notes |
IncSW/go-bencode |
991.5 ns/op |
960 B/op |
18 allocs/op |
|
cristalhq/bencode |
1160 ns/op |
960 B/op |
18 allocs/op |
|
nabilanam/bencode |
1379 ns/op |
1240 B/op |
39 allocs/op |
|
owenliang/dht |
1702 ns/op |
1352 B/op |
46 allocs/op |
|
aleksatr/go-bencode |
2279 ns/op |
1816 B/op |
51 allocs/op |
|
jackpal/bencode-go |
2597 ns/op |
1688 B/op |
59 allocs/op |
|
marksamman/bencode |
2758 ns/op |
5768 B/op |
54 allocs/op |
|
ehmry/go-bencode |
2865 ns/op |
2064 B/op |
41 allocs/op |
|
chihaya/chihaya |
2961 ns/op |
5880 B/op |
61 allocs/op |
|
lajide/bencode |
2973 ns/op |
5880 B/op |
61 allocs/op |
|
anacrolix/torrent |
3723 ns/op |
2456 B/op |
62 allocs/op |
|
cuberat/go-bencode |
4687 ns/op |
6544 B/op |
119 allocs/op |
|
zeebo/bencode |
5954 ns/op |
6376 B/op |
91 allocs/op |
|
tumdum/bencoding |
7891 ns/op |
6568 B/op |
157 allocs/op |
|
lwch/bencode |
- |
- |
- |
3 |
stints/bencode |
- |
- |
- |
6 |
Library |
Time |
Bytes Allocated |
Objects Allocated |
IncSW/go-bencode Unmarshal |
1269 ns/op |
1016 B/op |
21 allocs/op |
IncSW/go-bencode Marshal |
27929 ns/op |
262816 B/op |
2 allocs/op |
IncSW/go-bencode MarshalTo |
7851 ns/op |
0 B/op |
0 allocs/op |
|
|
|
|
|
|
|
|
cristalhq/bencode Unmarshal |
1552 ns/op |
1016 B/op |
21 allocs/op |
cristalhq/bencode Marshal |
49125 ns/op |
443168 B/op |
5 allocs/op |
cristalhq/bencode MarshalTo |
8183 ns/op |
0 B/op |
0 allocs/op |
|
|
|
|
|
|
|
|
aleksatr/go-bencode Unmarshal |
21615 ns/op |
223352 B/op |
69 allocs/op |
aleksatr/go-bencode Marshal |
26401 ns/op |
222689 B/op |
13 allocs/op |
|
|
|
|
|
|
|
|
jackpal/bencode-go Unmarshal |
48384 ns/op |
444484 B/op |
81 allocs/op |
jackpal/bencode-go Marshal |
55097 ns/op |
445694 B/op |
60 allocs/op |
jackpal/bencode-go MarshalTo |
35800 ns/op |
223128 B/op |
54 allocs/op |
- BUG: Keys must be strings and appear in sorted order (sorted as raw strings, not alphanumerics). http://bittorrent.org/beps/bep_0003.html#bencoding
- BUG: []byte encoding as a list
- BUG: not supported list in list
- WARN: ignoring unsupported types without errors
- INFO: just 4 types supported
- INFO: files only
MIT License.