Skip to content

Commit 8ad96d9

Browse files
authored
Merge pull request #10 from thinkeridea/doc
完善 README.md
2 parents 42512d1 + 5b09dfd commit 8ad96d9

File tree

2 files changed

+130
-46
lines changed

2 files changed

+130
-46
lines changed

README.md

Lines changed: 26 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,32 @@
1+
# go-extend
2+
13
[![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/thinkeridea/go-extend)
24
[![Build Status](https://travis-ci.org/thinkeridea/go-extend.svg?branch=master)](https://travis-ci.org/thinkeridea/go-extend)
35
[![codecov](https://codecov.io/gh/thinkeridea/go-extend/branch/master/graph/badge.svg)](https://codecov.io/gh/thinkeridea/go-extend)
46
[![Go Report Card](https://goreportcard.com/badge/github.com/thinkeridea/go-extend)](https://goreportcard.com/report/github.com/thinkeridea/go-extend)
57

6-
# go-extend 收集一些常用的操作函数,辅助更快的完成开发工作,并减少重复代码
8+
go-extend 收集一些常用的操作函数,辅助更快的完成开发工作,并减少重复代码
79

810
它收集各种杂项函数,并进行归类,方便使用者查找,它可以大幅度提升开发效率和程序运行性能。它以保证性能为最大前提,提供有效的方法。
911
针对一些标准库中的函数或者库进行一些修改,使其性能大幅度提升,但它并不用来替换标准库函数,这些函数往往会在一些场景下有效,但有些函数可以用来替换标准库函数,它们保持一致的功能,且相当安全。
1012

1113
一些包或者函数使用示例及分析可以在我的 [博客(https://blog.thinkeridea.com)](https://blog.thinkeridea.com) 中找到。
1214

15+
## 安装
16+
17+
```shell
18+
$ go get github.com/thinkeridea/go-extend/...
19+
```
20+
1321
## 规范:
1422

1523
- 与标准库包名一致的使用 `ex` 前缀, 避免与标准库包冲突
1624
- 包目录下 `doc.go` 作为包说明文档
1725

26+
## 性能测试
27+
28+
包中一些函数会进行性能测试,包括每次修订的性能对比,它们一般位于各自包下面的 `benchmark` 目录下,性能测试结果可以在 [benchmark.md](benchmark.md) 快速浏览。
29+
1830
## 标准库函数改进列表
1931

2032
用来替换标准库的函数,它们和标准库函数功能保持一致,并拥有更好的性能:
@@ -40,13 +52,16 @@
4052
- [exbytes.ToString](https://godoc.org/github.com/thinkeridea/go-extend/exbytes#ToString) 结合 `unsafe` 使 `[]byte``string` 没有成本
4153
- [exbytes.Replace](https://godoc.org/github.com/thinkeridea/go-extend/exbytes#Replace) 它使用原地替换,直接修改输入的数据,获得更好的性能
4254
- [exbytes.Reverse](https://godoc.org/github.com/thinkeridea/go-extend/exbytes#Reverse) 原地反转 []byte
55+
- [exbytes.Sub](https://godoc.org/github.com/thinkeridea/go-extend/exbytes#Sub)[exutf8.RuneSub](https://godoc.org/github.com/thinkeridea/go-extend/exunicode/exutf8#RuneSub) 的别名,提供字符数量截取字节数组的方法
4356

4457
### [exstrings](https://godoc.org/github.com/thinkeridea/go-extend/exstrings)
4558

4659
标准库 `strings` 的扩展包,提供一些高效的 `string` 操作方法。
4760

4861
- [exstrings.UnsafeToBytes](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#UnsafeToBytes) 结合 `unsafe` 使 `string``[]byte` 没有成本,但是字面量字符串转换后不可修改,否则会出现严重错误
62+
- [exstrings.Bytes](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#Bytes) 把字符串转换成 []byte 类型,和 []byte(s) 操作结果一致,但是效率更高
4963
- [exstrings.Copy](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#Copy) 拷贝一个字符串,在截取字符串之后,避免得到大字符串引用导致内存泄漏
64+
- [exstrings.SubString](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#SubString)[exutf8.RuneSubString](https://godoc.org/github.com/thinkeridea/go-extend/exunicode/exutf8#RuneSubString) 的别名,根据字符数量截取字符串的方法
5065
- [exstrings.Join](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#Join) 该方法是对标准库 strings.Join 修改,配合 unsafe 包能有效减少内存分配
5166
- [exstrings.JoinToBytes](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#JoinToBytes) 它响应一个 `[]byte` 类型,有效避免类型转换
5267
- [exstrings.Repeat](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#Repeat) 该方法是对标准库 strings.Repeat 修改,对于创建大字符串能有效减少内存分配
@@ -84,7 +99,7 @@
8499

85100
### [exnet](https://godoc.org/github.com/thinkeridea/go-extend/exnet)
86101

87-
标准库 `exnet` 的扩展包,提供一些常用的操作函数。
102+
标准库 `net` 的扩展包,提供一些常用的操作函数。
88103

89104
- [exnet.HasLocalIPddr](https://godoc.org/github.com/thinkeridea/go-extend/exnet#HasLocalIPddr) 检查一个ip是否是内网ip
90105
- [exnet.HasLocalIP](https://godoc.org/github.com/thinkeridea/go-extend/exnet#HasLocalIP) 检查一个ip对象是否是内网ip
@@ -96,6 +111,15 @@
96111
- [exnet.Long2IPString](https://godoc.org/github.com/thinkeridea/go-extend/exnet#Long2IPString) 把数值转为ip字符串
97112
- [exnet.Long2IP](https://godoc.org/github.com/thinkeridea/go-extend/exnet#Long2IP) 把数值转为net.IP
98113

114+
### [exutf8](https://godoc.org/github.com/thinkeridea/go-extend/exunicode/exutf8)
115+
116+
标准库 `utf8` 的扩展包,提供一些高效处理多字节字符的方法。
117+
118+
- [exutf8.RuneIndex](https://godoc.org/github.com/thinkeridea/go-extend/exunicode/exutf8#RuneIndex) 计算指定字符数量的字节索引位置
119+
- [exutf8.RuneIndexInString](https://godoc.org/github.com/thinkeridea/go-extend/exunicode/exutf8#RuneIndexInString) 计算指定字符数量的字符串索引位置
120+
- [exutf8.RuneSub](https://godoc.org/github.com/thinkeridea/go-extend/exunicode/exutf8#RuneSub) 多字节字符截取方法
121+
- [exutf8.RuneSubString](https://godoc.org/github.com/thinkeridea/go-extend/exunicode/exutf8#RuneSubString) 多字节字符串截取
122+
99123
### [exatomic](https://godoc.org/github.com/thinkeridea/go-extend/exatomic)
100124

101125
一个浮点数的原子包, 支持 `float32``float64` 类型,鉴于浮点数的精度可能会有些意外,详细查看包文档或浮点数算法。
@@ -151,50 +175,6 @@
151175
- [Record.ArrayFieldJoin](https://godoc.org/github.com/thinkeridea/go-extend/datalog#Record.ArrayFieldJoin) 使用 fieldSep 连接 Record,其结果作为一个数组的单元
152176
- [Record.UnsafeArrayFieldJoin](https://godoc.org/github.com/thinkeridea/go-extend/datalog#Record.UnsafeArrayFieldJoin) 使用 fieldSep 连接 Record,其结果作为一个数组的单元,会使用 `unsafe` 包减少内存分配
153177

154-
## 标准库函数改进性能测试:
155-
156-
- [exstrings](exstrings/)
157-
158-
- Replace 系列函数测试报告
159-
160-
```
161-
goos: darwin
162-
goarch: amd64
163-
pkg: github.com/thinkeridea/go-extend/exstrings/benchmark
164-
BenchmarkReplace-8 500000 3256 ns/op 960 B/op 15 allocs/op
165-
BenchmarkReplaceToBytes-8 500000 3283 ns/op 1024 B/op 16 allocs/op
166-
BenchmarkUnsafeReplaceToBytes-8 500000 3041 ns/op 960 B/op 15 allocs/op
167-
BenchmarkStandardLibraryReplace-8 500000 3679 ns/op 1920 B/op 30 allocs/op
168-
PASS
169-
ok github.com/thinkeridea/go-extend/exstrings/benchmark 7.769s
170-
```
171-
172-
- Repeat 性能测试报告
173-
174-
```
175-
goos: darwin
176-
goarch: amd64
177-
pkg: github.com/thinkeridea/go-extend/exstrings/benchmark
178-
BenchmarkRepeat-8 50000 28818 ns/op 303104 B/op 1 allocs/op
179-
BenchmarkRepeatToBytes-8 50000 28104 ns/op 303104 B/op 1 allocs/op
180-
BenchmarkStandardLibraryRepeat-8 20000 51968 ns/op 606208 B/op 2 allocs/op
181-
PASS
182-
ok github.com/thinkeridea/go-extend/exstrings/benchmark 6.200s
183-
```
184-
185-
- Join 性能测试报告
186-
187-
```
188-
goos: darwin
189-
goarch: amd64
190-
pkg: github.com/thinkeridea/go-extend/exstrings/benchmark
191-
BenchmarkJoin-8 5000000 290 ns/op 64 B/op 1 allocs/op
192-
BenchmarkJoinToBytes-8 5000000 290 ns/op 64 B/op 1 allocs/op
193-
BenchmarkStandardLibraryJoin-8 5000000 315 ns/op 128 B/op 2 allocs/op
194-
PASS
195-
ok github.com/thinkeridea/go-extend/exstrings/benchmark 5.406s
196-
```
197-
198178
## 许可
199179

200180
go-extend 根据 [GNU General Public License v3.0](https://www.gnu.org/licenses/) 许可证授权,有关完整许可证文本,请参阅 [LICENSE](LICENSE)

benchmark.md

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# 性能测试报告
2+
3+
## [exstrings](exstrings/)
4+
5+
- [exstrings.Replace](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#Replace)
6+
7+
```shell
8+
goos: darwin
9+
goarch: amd64
10+
pkg: github.com/thinkeridea/go-extend/exstrings/benchmark
11+
BenchmarkReplace-8 500000 3256 ns/op 960 B/op 15 allocs/op
12+
BenchmarkReplaceToBytes-8 500000 3283 ns/op 1024 B/op 16 allocs/op
13+
BenchmarkUnsafeReplaceToBytes-8 500000 3041 ns/op 960 B/op 15 allocs/op
14+
BenchmarkStandardLibraryReplace-8 500000 3679 ns/op 1920 B/op 30 allocs/op
15+
PASS
16+
ok github.com/thinkeridea/go-extend/exstrings/benchmark 7.769s
17+
```
18+
19+
- [exstrings.Repeat](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#Repeat)
20+
21+
```shell
22+
goos: darwin
23+
goarch: amd64
24+
pkg: github.com/thinkeridea/go-extend/exstrings/benchmark
25+
BenchmarkRepeat-8 50000 28818 ns/op 303104 B/op 1 allocs/op
26+
BenchmarkRepeatToBytes-8 50000 28104 ns/op 303104 B/op 1 allocs/op
27+
BenchmarkStandardLibraryRepeat-8 20000 51968 ns/op 606208 B/op 2 allocs/op
28+
PASS
29+
ok github.com/thinkeridea/go-extend/exstrings/benchmark 6.200s
30+
```
31+
32+
- [exstrings.Join](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#Join)
33+
34+
```shell
35+
goos: darwin
36+
goarch: amd64
37+
pkg: github.com/thinkeridea/go-extend/exstrings/benchmark
38+
BenchmarkJoin-8 5000000 290 ns/op 64 B/op 1 allocs/op
39+
BenchmarkJoinToBytes-8 5000000 290 ns/op 64 B/op 1 allocs/op
40+
BenchmarkStandardLibraryJoin-8 5000000 315 ns/op 128 B/op 2 allocs/op
41+
PASS
42+
ok github.com/thinkeridea/go-extend/exstrings/benchmark 5.406s
43+
```
44+
45+
- [exstrings.Reverse](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#Reverse)
46+
47+
`BenchmarkReverseUTF8DecodeRuneInString``BenchmarkExstringsReverse` 优化前的版本
48+
49+
```shell
50+
goos: darwin
51+
goarch: amd64
52+
pkg: github.com/thinkeridea/go-extend/exstrings/benchmark
53+
BenchmarkReverseRunes-8 710557 1695 ns/op 480 B/op 2 allocs/op
54+
BenchmarkReverseRange-8 1404463 845 ns/op 192 B/op 1 allocs/op
55+
BenchmarkReverseUTF8DecodeRuneInString-8 1658835 720 ns/op 192 B/op 1 allocs/op
56+
BenchmarkExstringsReverse-8 1738339 691 ns/op 192 B/op 1 allocs/op
57+
PASS
58+
ok github.com/thinkeridea/go-extend/exstrings/benchmark 8.030s
59+
```
60+
61+
- [exstrings.Bytes](https://godoc.org/github.com/thinkeridea/go-extend/exstrings#Bytes)
62+
63+
```shell
64+
goos: darwin
65+
goarch: amd64
66+
pkg: github.com/thinkeridea/go-extend/exstrings/benchmark
67+
BenchmarkStandardLibraryStringToBytes-8 18468846 58.6 ns/op 192 B/op 1 allocs/op
68+
BenchmarkExstringsStringToBytes-8 23291382 50.9 ns/op 192 B/op 1 allocs/op
69+
PASS
70+
ok github.com/thinkeridea/go-extend/exstrings/benchmark 2.395s
71+
```
72+
73+
## [exbytes](https://godoc.org/github.com/thinkeridea/go-extend/exbytes)
74+
75+
- [exbytes.Replace](https://godoc.org/github.com/thinkeridea/go-extend/exbytes#Replace)
76+
77+
```shell
78+
goos: darwin
79+
goarch: amd64
80+
pkg: github.com/thinkeridea/go-extend/exbytes/benchmark
81+
BenchmarkReplace-8 545372 1974 ns/op 416 B/op 1 allocs/op
82+
BenchmarkBytesReplace-8 598182 1999 ns/op 736 B/op 2 allocs/op
83+
BenchmarkStringsReplace-8 518322 2112 ns/op 1056 B/op 3 allocs/op
84+
BenchmarkUnsafeStringsReplace-8 618229 1991 ns/op 736 B/op 2 allocs/op
85+
PASS
86+
ok github.com/thinkeridea/go-extend/exbytes/benchmark 4.695s
87+
```
88+
89+
## [exutf8](https://godoc.org/github.com/thinkeridea/go-extend/exunicode/exutf8)
90+
91+
- [exutf8.RuneSubString](https://godoc.org/github.com/thinkeridea/go-extend/exunicode/exutf8#RuneSubString)
92+
93+
```shell
94+
goos: darwin
95+
goarch: amd64
96+
pkg: github.com/thinkeridea/go-extend/exunicode/exutf8/benchmark
97+
BenchmarkSubStrRunes-8 876604 1351 ns/op 336 B/op 2 allocs/op
98+
BenchmarkSubStrRange-8 13053810 90.7 ns/op 0 B/op 0 allocs/op
99+
BenchmarkSubStrDecodeRuneInString-8 11359845 103 ns/op 0 B/op 0 allocs/op
100+
BenchmarkSubStrRuneIndexInString-8 14555875 81.6 ns/op 0 B/op 0 allocs/op
101+
BenchmarkSubStrRuneSubString-8 14257446 83.0 ns/op 0 B/op 0 allocs/op
102+
PASS
103+
ok github.com/thinkeridea/go-extend/exunicode/exutf8/benchmark 7.238s
104+
```

0 commit comments

Comments
 (0)