@@ -44,10 +44,14 @@ Thus I implemented fpGo. I hope you would like it :)
4444
4545* Java8Stream-like Collection
4646
47+ * Queue (LinkedListQueue/ChannelQueue/BufferedChannelQueue/ConcurrentQueue)
48+
4749* PythonicGenerator-like Coroutine(yield/yieldFrom)
4850
4951* Akka/Erlang-like Actor model(send/receive/spawn/states)
5052
53+ * ** network/SimpleHTTP** inspired by [ Retrofit] ( https://github.com/square/retrofit )
54+
5155# Special thanks
5256* fp functions(Dedupe/Difference/Distinct/IsDistinct/DropEq/Drop/DropLast/DropWhile/IsEqual/IsEqualMap/Every/Exists/Intersection/Keys/Values/Max/Min/MinMax/Merge/IsNeg/IsPos/PMap/Range/Reverse/Minus/Some/IsSubset/IsSuperset/Take/TakeLast/Union/IsZero/Zip/GroupBy/UniqBy/Flatten/Prepend/Partition/Tail/Head/SplitEvery)
5357 * Credit: https://github.com/logic-building/functional-go
@@ -143,6 +147,64 @@ for _, v := range s.ToArray() {
143147fmt.Println (tempString) // tempString would be "1234"
144148```
145149
150+ ## Queue(LinkedListQueue/ChannelQueue/BufferedChannelQueue/ConcurrentQueue) (inspired by Collection libs)
151+
152+ ### LinkedListQueue(Shift/Unshift/Push/Pop), ConcurrentQueue(inspired by Java)
153+
154+ Example:
155+
156+ ``` go
157+ var queue Queue
158+ var stack Stack
159+ var err error
160+ var result interface {}
161+
162+ linkedListQueue := NewLinkedListQueue ()
163+ queue = linkedListQueue
164+ stack = linkedListQueue
165+ concurrentQueue := NewConcurrentQueue (queue)
166+
167+ // As a Queue, Put(val) in the TAIL and Take() in the HEAD
168+ err = queue.Offer (1 )
169+ err = queue.Offer (2 )
170+ err = queue.Offer (3 )
171+ result, err = queue.Poll () // Result should be 1
172+ result, err = queue.Poll () // Result should be 2
173+ result, err = queue.Poll () // Result should be 3
174+ result, err = queue.Poll () // Err: ErrQueueIsEmpty
175+
176+ // As a Stack, Push(val) & Pop() in the TAIL.
177+ err = stack.Push (1 )
178+ err = stack.Push (2 )
179+ err = stack.Push (3 )
180+ result, err = stack.Pop () // Result should be 3
181+ result, err = stack.Pop () // Result should be 2
182+ result, err = stack.Pop () // Result should be 1
183+ result, err = stack.Pop () // Err: ErrStackIsEmpty
184+ ```
185+
186+ ### BufferedChannelQueue(Offer/Take/TakeWithTimeout)
187+
188+ Example:
189+
190+ ``` go
191+ var err error
192+ var result interface {}
193+ var timeout time.Duration
194+
195+ bufferedChannelQueue := NewBufferedChannelQueue (3 , 10000 , 100 )
196+ bufferedChannelQueue.SetLoadFromPoolDuration (time.Millisecond / 10 )
197+ bufferedChannelQueue.SetFreeNodeHookPoolIntervalDuration (1 * time.Millisecond )
198+
199+ err = queue.Offer (1 )
200+ err = queue.Offer (2 )
201+ err = queue.Offer (3 )
202+ timeout = 1 * time.Millisecond
203+ result, err = bufferedChannelQueue.TakeWithTimeout (timeout) // Result should be 1
204+ result, err = bufferedChannelQueue.TakeWithTimeout (timeout) // Result should be 2
205+ result, err = bufferedChannelQueue.TakeWithTimeout (timeout) // Result should be 3
206+ ```
207+
146208## Actor (inspired by Akka/Erlang)
147209
148210### Actor common(send/receive/spawn/states)
0 commit comments