提示
以下常用方法列表,文档更新可能滞后于代码新特性,更多的方法及示例请参考代码文档: https://pkg.go.dev/github.com/gogf/gf/v2/container/gring
New
-
说明:
New
创建并返回cap
元素的环形结构。可选参数safe
指定是否在并发安全中使用此结构,默认情况下为false
。 -
格式:
New(cap int, safe ...bool) *Ring
- 示例:
func ExampleNew() {
// Non concurrent safety
gring.New(10)
// Concurrent safety
gring.New(10, true)
// Output:
}
Val
- 说明:
Val
返回当前位置的值。 - 格式:
Val() interface{}
- 示例:
func ExampleRing_Val() {
r := gring.New(10)
r.Set(1)
fmt.Println("Val:", r.Val())
r.Next().Set("GoFrame")
fmt.Println("Val:", r.Val())
// Output:
// Val: 1
// Val: GoFrame
}
Len
- 说明:
Len
返回Ring
的大小。 - 格式:
Len() int
- 示例:
func ExampleRing_Len() {
r1 := gring.New(10)
for i := 0; i < 5; i++ {
r1.Set(i).Next()
}
fmt.Println("Len:", r1.Len())
r2 := gring.New(10, true)
for i := 0; i < 10; i++ {
r2.Set(i).Next()
}
fmt.Println("Len:", r2.Len())
// Output:
// Len: 5
// Len: 10
}
Cap
- 说明:
Cap
返回Ring
的容量。 - 格式:
Cap() int
- 示例:
func ExampleRing_Cap() {
r1 := gring.New(10)
for i := 0; i < 5; i++ {
r1.Set(i).Next()
}
fmt.Println("Cap:", r1.Cap())
r2 := gring.New(10, true)
for i := 0; i < 10; i++ {
r2.Set(i).Next()
}
fmt.Println("Cap:", r2.Cap())
// Output:
// Cap: 10
// Cap: 10
}
Set
- 说明:
Set
将为当前位置的值设置为Value
。 - 格式:
Set(value interface{}) *Ring
- 示例:
func ExampleRing_Set() {
r := gring.New(10)
r.Set(1)
fmt.Println("Val:", r.Val())
r.Next().Set("GoFrame")
fmt.Println("Val:", r.Val())
// Output:
// Val: 1
// Val: GoFrame
}
Put
- 说明:
Put
将为当前位置的值设置为Value
,并将ring
移动到下一个位置。 - 格式:
Put(value interface{}) *Ring
- 示例:
func ExampleRing_Put() {
r := gring.New(10)
r.Put(1)
fmt.Println("Val:", r.Val())
fmt.Println("Val:", r.Prev().Val())
// Output:
// Val: <nil>
// Val: 1
}
Move
- 说明:正向或者逆向移动
n % r.Len()
个节点,并返回移动后指向的位置。当n>=0
时,为正向移动,反之为反向移动。 - 格式:
Move(n int) *Ring
- 示例:
func ExampleRing_Move() {
r := gring.New(10)
for i := 0; i < 10; i++ {
r.Set(i).Next()
}
// ring at Pos 0
fmt.Println("CurVal:", r.Val())
r.Move(5)
// ring at Pos 5
fmt.Println("CurVal:", r.Val())
// Output:
// CurVal: 0
// CurVal: 5
}
Prev
- 说明:
Prev
返回ring
上一个位置的元素。 - 格式:
Prev() *Ring
- 示例:
func ExampleRing_Prev() {
r := gring.New(10)
for i := 0; i < 5; i++ {
r.Set(i).Next()
}
fmt.Println("Prev:", r.Prev().Val())
fmt.Println("Prev:", r.Prev().Val())
// Output:
// Prev: 4
// Prev: 3
}