Skip to content

Commit 89337c3

Browse files
author
willzhen
committed
Update readme
1 parent 4eb6608 commit 89337c3

File tree

6 files changed

+171
-42
lines changed

6 files changed

+171
-42
lines changed

README.md

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,39 @@
1-
# GO library
2-
- client:调用第三方服务的客户端。
3-
- ti: ti 平台客户端。
4-
- ti3.4
5-
- ti3.7
6-
- httpcall:http 调用的封装。
7-
- json_post.go: JsonPost。
8-
- json_get.go: JsonGet。
9-
- json_put.go: JsonPut。
10-
- json_delete.go: JsonDelete。
11-
- misc:常用的公共函数库
12-
- time_related:时间相关的函数
13-
- time_tick.go: TimeTick -- 计时器。
14-
- timed.go: Timed -- 函数计时调用。
15-
- goroutine_help.go:
16-
- GoroutineHelp.Recoverd:协程 recover。
17-
- GoroutineHelp.SafeGo:安全的 go。
18-
- retry.go: Retry -- 带重试调用。
19-
- id.go:
20-
- GenerateRandomString:生成随机字符串。
21-
- GenerateUUID:生成UUID。
22-
- BighumpToUnderscore:大驼峰参数转换成下划线。
23-
- UnderscoreToBighump:下划线参数转换成大驼峰。
24-
- log.og
25-
- FoldLog: 折叠日志中数据过长的字段,仅支持 json。
26-
- stl_extension:stl 的扩展
27-
- limit_waitgroup.go:LimitWaitGroup -- 对于系统 WaitGroup 的扩展,支持 limit 并发限制并且阻塞。
28-
- ordered_map.go:OrderedMap -- 实现了 c++ 中的排序 map,可以按照顺序遍历所有元素。
29-
- text: 文本处理相关方法
30-
- aho_automaton.go:ac 自动机,多模式串快速匹配。在一个文本中找出来,出现过哪些字符串子串以及其定位。可以理解对同一文本 s 多次调用 strings.Contains(s, xxx) 的加速。
31-
- BuildAcTrie: 构建自动机。
32-
- AcTrie.Search: 匹配。
33-
- edit_distance.go:
34-
- Levenshtein:文本编辑距离。
35-
- TextSim:计算两个文本的相似度。
1+
- [go common library](#go-common-library)
2+
- [httpcall 模块](#httpcall-模块)
3+
- [misc 模块](#misc-模块)
4+
- [stl\_extension 模块](#stl_extension-模块)
5+
- [text 模块](#text-模块)
6+
- [任务调度模块](#任务调度模块)
7+
8+
# go common library
9+
本仓库整理了 golang 中最常用的代码、函数、和模块。
10+
11+
## httpcall 模块
12+
常用的简单 http 调用的封装。
13+
详见 [httpcall 模块说明](https://github.com/memory-overflow/go-common-library/blob/main/httpcall/readme.md)
14+
15+
## misc 模块
16+
常用的公共函数库,主要包含时间、协程安全、重试、id生成,log 相关的常用的处理函数。
17+
详见[misc 模块说明](https://github.com/memory-overflow/go-common-library/blob/main/misc/readme.md)
18+
19+
## stl_extension 模块
20+
针对 golang 现有的 stl 的不足的扩展。主要是对 WaitGroup 和 map 的扩展。
21+
- LimitWaitGroup -- 对于系统 WaitGroup 的扩展,支持 limit 并发限制并且阻塞。
22+
- OrderedMap -- 实现了 c++ 中的排序 map,可以按照顺序遍历所有元素。
23+
24+
25+
详见[stl_extension 模块说明](https://github.com/memory-overflow/go-common-library/blob/main/stl_extension/readme.md)
26+
27+
## text 模块
28+
常用文本处理相关方法。
29+
- AcTrie:ac 自动机,多模式串快速匹配。在一个文本中快速找出来出现过哪些字符串子串以及其定位。可以理解对同一文本 s 多次调用 strings.Contains(s, xxx) 的加速。
30+
- Levenshtein:计算文本编辑距离。
31+
- TextSim:计算两个文本的相似度。
32+
33+
34+
详见[text 模块说明](https://github.com/memory-overflow/go-common-library/blob/main/text/readme.md)
35+
36+
37+
## 任务调度模块
38+
任务调度模块在 go 语言中,提供了一个轻量级的任务调度框架,方便对各种同步、异步任务做统一的任务调度。致力于提高构建一套任务管理调度系统的效率。
39+
详见[任务调度框架设计原理和使用说明](https://github.com/memory-overflow/go-common-library/blob/main/task_scheduler/readme.md)

httpcall/readme.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
# http 最常用的 json 协议调用封装
2-
- json_post.go: JsonPost。
3-
- json_get.go: JsonGet。
4-
- json_put.go: JsonPut。
5-
- json_delete.go: JsonDelete。
2+
4个方法, JsonPost、JsonGet、JsonPut、JsonDelete。
63

7-
8-
example: https://github.com/memory-overflow/go-common-library/httpcall/httpcall_test.go
4+
example: [httpcall_test.go](https://github.com/memory-overflow/go-common-library/blob/main/httpcall/httpcall_test.go)
95
```go
106
import (
117
"context"

misc/readme.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
[TOC]
1+
- [misc 模块说明](#misc-模块说明)
2+
- [time\_related 模块](#time_related-模块)
3+
- [download 模块](#download-模块)
4+
- [goroutine\_help 模块](#goroutine_help-模块)
5+
- [retry](#retry)
6+
- [id 生成器](#id-生成器)
7+
- [log](#log)
28

39
# misc 模块说明
410

stl_extension/readme.md

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
- [stl\_extension 模块](#stl_extension-模块)
2+
- [LimitWaitGroup](#limitwaitgroup)
3+
- [OrderedMap](#orderedmap)
4+
5+
# stl_extension 模块
6+
7+
stl_extension 模块主要是对系统的 stl 的不足做补充。
8+
9+
## LimitWaitGroup
10+
对原生 stl 的 WaitGroup 做补充,原生的 WaitGroup 没有办法限制协程的数量,比如如下处理,
11+
```go
12+
group := sync.WaitGroup{}
13+
for i := 0; i < 10000; i++ {
14+
v := i
15+
group.Add(1)
16+
go func() {
17+
defer group.Done()
18+
fmt.Print(v)
19+
}()
20+
}
21+
group.Wait()
22+
```
23+
会在一瞬间创建大量的协程。而用 LimitWaitGroup,可以实现限制并发的协程数量。
24+
25+
```go
26+
// 10 协程并发
27+
group := stlextension.NewLimitWaitGroup(10)
28+
for i := 0; i < 10000; i++ {
29+
v := i
30+
// 如果协程并发满了,会阻塞等待
31+
group.Add(1)
32+
go func() {
33+
defer group.Done()
34+
fmt.Print(v)
35+
}()
36+
}
37+
group.Wait()
38+
```
39+
40+
## OrderedMap
41+
golang stl 原生的 map 是基于 hash 的无需 map,OrderedMap 是对 hash map 的补充。支持按照 key 顺序遍历。
42+
OrderedMap 使用 avl 树实现,是线程安全的。
43+
和 c++ map 对比测试,1000 万的随机的增删查操作:
44+
OrderedMap: 21806 ms, c++ map: 11592ms,效率比 c++ map 慢两倍。
45+
next 遍历整个 map, OrderedMap: 676ms, c++ map: 171ms;
46+
prev 遍历整个 map, OrderedMap: 663ms, c++ map: 198ms;
47+
遍历的效率大概比 c++ map 的慢三倍。
48+
49+
用法:
50+
- 构建
51+
```go
52+
m := stlextension.OrderedMap{}
53+
```
54+
55+
- 判断 map 是否为空
56+
```go
57+
m.Empty()
58+
```
59+
60+
- 插入: 插入的 key 必须实现 stlextension.Key Less interface,也就是必须要实现比较方法,value 可以是任意 interface{}。如果插入的 key 和其他之前插入的旧的 key 比较的时候失败,插入也会失败。
61+
62+
```go
63+
err := m.Insert(stlextension.IntKey(5), "BBB");
64+
```
65+
66+
- 删除:插入的 key 必须实现 stlextension.Key Less interface,也就是必须要实现比较方法。
67+
```go
68+
err := m.Erase(stlextension.IntKey(5));
69+
```
70+
71+
- 计数:计算 map 中的 key 的数量。
72+
```go
73+
num, err := m.Count(stlextension.IntKey(4))
74+
```
75+
76+
- Find: 寻找 key 的 value。
77+
```go
78+
value, exixt, err := m.Find(stlextension.IntKey(5))
79+
```
80+
81+
- Begin: Begin 获取 key 最小的元素的 key 和 value,配合 Next 进行迭代。
82+
- Next: 按照 key 的顺序获取当前 key 的下一个 key 和 value。
83+
```go
84+
// test begin and next
85+
for key, value := m.Begin(); key != nil; key, value, err = m.Next(key) {
86+
if err != nil {
87+
log.Fatalf("test next error: %v", err)
88+
}
89+
log.Printf("key: %v, value: %v", key, value)
90+
}
91+
```
92+
93+
- RBegin: RBegin 获取 key 最大的元素的 key 和 value,配合 Prev 进行方向迭代。
94+
- Prev: 按照 key 的顺序获取当前 key 的前一个 key 和 value。
95+
```go
96+
// test rbegin and prev
97+
for key, value := m.RBegin(); key != nil; key, value, err = m.Prev(key) {
98+
if err != nil {
99+
log.Fatalf("test prev error: %v", err)
100+
}
101+
log.Printf("key: %v, value: %v", key, value)
102+
}
103+
```
104+
105+
- Clear: 清空 map。
106+
```go
107+
m.Clear()
108+
```
109+
110+
- Size: map 元素个数。
111+
```go
112+
s := m.Size()
113+
```
114+
115+
- String: map 转换成 string 输出。
116+
```go
117+
log.Print(m.String())
118+
```
119+
120+
example 参考:[TestOrderMap](https://github.com/memory-overflow/go-common-library/blob/main/stl_extension/stl_test.go#L13)

task_scheduler/readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# 轻量级任务调度框架

text/readme.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# text 模块
2+

0 commit comments

Comments
 (0)