一边python,一边golang ! 时常因为工作切换语言造成了短路。container/list是golang语言内置的链表库。 对比其他语言的list,container/list该有的功能都有,就缺一个popLeft popRight方法。如果要实现pop方法需要去除value := list.Back() , 然后list.Remove(value) 。但这样不能保持操作的原子性。 解决的方法是用全局的互斥锁。
下面是 container/list 包的基本用法.
需要说明的是,container/list默认不是线程安全的,应该说大多数语言自带的list都不能确保数据安全。 如果你想保证数据安全,那么可以使用Lock锁解决。
如果你是在goroutine协程环境下使用container/list链表,那么一定要记得加锁。 代码如下:
使用container/list包结合sync的mutex互斥锁造了一个支持线程安全的链表。
上面那段go代码运行后的结果: