0
点赞
收藏
分享

微信扫一扫

爱上开源之底层两个数据结构


最简单的环形队列

爱上开源之底层两个数据结构_泛型


func TestNewLoopQueue(t *testing.T) {
size := 100
q := NewLoopQueue(size, 1)

t.Logf("IsEmpty : %v", q.IsEmpty())
t.Logf("Len : %v", q.Len())
t.Logf("Detach : %v", q.Detach())

var i = 1

q.Insert(&i)

t.Logf("IsEmpty : %v", q.IsEmpty())
t.Logf("Len : %v", q.Len())

o := q.Get()
t.Logf("Get : %v", *o)
*o = 11

t.Logf("IsEmpty : %v", q.IsEmpty())
t.Logf("Len : %v", q.Len())

t.Logf("Detach : %v", *q.Detach())
t.Logf("IsEmpty : %v", q.IsEmpty())
t.Logf("Len : %v", q.Len())
}

最简单的stack

func TestNewStack(t *testing.T) {
size := 100
q := NewStack(size, 1)

t.Logf("IsEmpty : %v", q.IsEmpty())
t.Logf("Len : %v", q.Len())
t.Logf("Detach : %v", q.Detach())

var i = 1

q.Insert(&i)

t.Logf("IsEmpty : %v", q.IsEmpty())
t.Logf("Len : %v", q.Len())

o := q.Get()
t.Logf("Get : %v", *o)
*o = 11

t.Logf("IsEmpty : %v", q.IsEmpty())
t.Logf("Len : %v", q.Len())

t.Logf("Detach : %v", *q.Detach())
t.Logf("IsEmpty : %v", q.IsEmpty())
t.Logf("Len : %v", q.Len())
}

实现上,借鉴了fasthttp, 在其基础上,使用了泛型,原有的实现,对象都是使用interface{}和any保存对象的。 interface{}的方式,在获取的时候,必须进行造型,这样会有一定的开销,在这里实现上进行了优化,对算法也进行了一定的优化, 所有的优化目的都是以性能为目标,仅可能在各个细节上都提高性能。

fasthttp这个项目非常的值得借鉴,虽然只是在http这块著名,但是其中的一些思想和实现方式,都被很多的网络通信的项目所借鉴, 包括一些golang net通信这块颇有名气的一些项目,查看他们的底层代码,实现都是借用fasthttp的方式。

这两个数据结构的实现,已经单独为一个项目,项目地址在 github.com/gohutool/

举报

相关推荐

0 条评论