github.com/code-reading/golang@v0.0.0-20220303082512-ba5bc0e589a3/coding/container/04-ring-unlink.go (about) 1 package main 2 3 import ( 4 "container/ring" 5 "fmt" 6 ) 7 8 func main() { 9 // 初始化ring 长度为6 10 // 注意 ring 长度初始化之后就不能修改了, 扩容可以通过Link 另外一个ring 来达到目的 11 r := ring.New(6) 12 13 n := r.Len() // 获取ring的长度 14 15 //通过遍历初始化 ring 16 for i := 0; i < n; i++ { 17 r.Value = i 18 r = r.Next() // 通过Next() 移动ring 19 } 20 // 打印ring 查看当前的引用指针位置 21 r.Do(func(p interface{}) { 22 fmt.Printf("%v ", p) 23 }) 24 // 上面初始化的长度位n , 然后ring的长度也是n 25 // 所以初始化结束之后 当前r的引用指针位置指向0 26 // output 0 1 2 3 4 5 27 28 fmt.Println() 29 // 删除元素 通过Unlink进行, 是从当前r 的下一个开始计算, 即从r.Next()开始 30 // Unlink three elements from r, starting from r.Next() 31 // 删除元素是从当前执行的下一个开始, 当前指针指向0 , r.Next() 是从1 开始 删除三个元素 32 // 就是把 1,2,3 删除了 33 r.Unlink(3) 34 35 // Iterate through the remaining ring and print its contents 36 r.Do(func(p interface{}) { 37 fmt.Printf("%v ", p) 38 }) 39 // output 0 4 5 40 }