docs: 优化 aoi、arrangement、buffer、combination、compress 包文档
This commit is contained in:
71
utils/buffer/README.md
Normal file
71
utils/buffer/README.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# Buffer
|
||||
|
||||
[](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/buffer)
|
||||
|
||||
该包提供了多种缓冲区实现,包括环形缓冲区和无界缓冲区。开发者可以使用它来快速构建和管理缓冲区。
|
||||
|
||||
## Ring [`环形缓冲区`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/buffer#Ring)
|
||||
|
||||
环形缓冲区是一种特殊的缓冲区,它的头尾是相连的。当缓冲区满时,新的元素会覆盖旧的元素。环形缓冲区在 `Minotaur` 中是一个泛型类型,可以容纳任意类型的元素。
|
||||
|
||||
## Unbounded [`无界缓冲区`](https://pkg.go.dev/github.com/kercylan98/minotaur/utils/buffer#Unbounded)
|
||||
|
||||
该缓冲区来源于 gRPC 的实现,用于在不使用额外 goroutine 的情况下实现无界缓冲区。无界缓冲区是一种特殊的缓冲区,它的大小可以动态扩展,不会出现溢出的情况。无界缓冲区在 `Minotaur` 中也是一个泛型类型,可以容纳任意类型的元素。
|
||||
|
||||
### 使用示例
|
||||
|
||||
环形缓冲区:
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/kercylan98/minotaur/utils/buffer"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ring := buffer.NewRing[int](5)
|
||||
for i := 0; i < 5; i++ {
|
||||
ring.Write(i)
|
||||
}
|
||||
|
||||
for i := 0; i < 5; i++ {
|
||||
v, _ := ring.Read()
|
||||
fmt.Println(v) // 0 1 2 3 4
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
无界缓冲区:
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/kercylan98/minotaur/utils/buffer"
|
||||
)
|
||||
|
||||
func main() {
|
||||
unbounded := buffer.NewUnboundedN[int]()
|
||||
for i := 0; i < 10; i++ {
|
||||
unbounded.Put(i)
|
||||
}
|
||||
|
||||
for {
|
||||
select {
|
||||
case v, ok := <-unbounded.Get():
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
unbounded.Load()
|
||||
fmt.Println(v) // 0 1 2 3 4 5 6 7 8 9
|
||||
if v == 9 {
|
||||
unbounded.Close()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
8
utils/buffer/doc.go
Normal file
8
utils/buffer/doc.go
Normal file
@@ -0,0 +1,8 @@
|
||||
// Package buffer 提供了缓冲区相关的实用程序。
|
||||
//
|
||||
// 包括创建、读取和写入缓冲区的函数。
|
||||
//
|
||||
// 这个包还提供了一个无界缓冲区的实现,可以在不使用额外 goroutine 的情况下实现无界缓冲区。
|
||||
//
|
||||
// 无界缓冲区的所有方法都是线程安全的,除了用于同步的互斥锁外,不会阻塞任何东西。
|
||||
package buffer
|
||||
Reference in New Issue
Block a user