@@ -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/Set/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
@@ -168,6 +172,64 @@ for _, v := range s.ToArray() {
168172fmt.Println (tempString) // tempString would be "1234"
169173```
170174
175+ ## Queue(LinkedListQueue/ChannelQueue/BufferedChannelQueue/ConcurrentQueue) (inspired by Collection libs)
176+
177+ ### LinkedListQueue(Shift/Unshift/Push/Pop), ConcurrentQueue(inspired by Java)
178+
179+ Example:
180+
181+ ``` go
182+ var queue Queue [int ]
183+ var stack Stack [int ]
184+ var err error
185+ var result int
186+
187+ linkedListQueue := NewLinkedListQueue [int ]()
188+ queue = linkedListQueue
189+ stack = linkedListQueue
190+ concurrentQueue := NewConcurrentQueue [int ](queue)
191+
192+ // As a Queue, Put(val) in the TAIL and Take() in the HEAD
193+ err = queue.Offer (1 )
194+ err = queue.Offer (2 )
195+ err = queue.Offer (3 )
196+ result, err = queue.Poll () // Result should be 1
197+ result, err = queue.Poll () // Result should be 2
198+ result, err = queue.Poll () // Result should be 3
199+ result, err = queue.Poll () // Err: ErrQueueIsEmpty
200+
201+ // As a Stack, Push(val) & Pop() in the TAIL.
202+ err = stack.Push (1 )
203+ err = stack.Push (2 )
204+ err = stack.Push (3 )
205+ result, err = stack.Pop () // Result should be 3
206+ result, err = stack.Pop () // Result should be 2
207+ result, err = stack.Pop () // Result should be 1
208+ result, err = stack.Pop () // Err: ErrStackIsEmpty
209+ ```
210+
211+ ### BufferedChannelQueue(Offer/Take/TakeWithTimeout)
212+
213+ Example:
214+
215+ ``` go
216+ var err error
217+ var result int
218+ var timeout time.Duration
219+
220+ bufferedChannelQueue := NewBufferedChannelQueue [int ](3 , 10000 , 100 )
221+ bufferedChannelQueue.SetLoadFromPoolDuration (time.Millisecond / 10 )
222+ bufferedChannelQueue.SetFreeNodeHookPoolIntervalDuration (1 * time.Millisecond )
223+
224+ err = queue.Offer (1 )
225+ err = queue.Offer (2 )
226+ err = queue.Offer (3 )
227+ timeout = 1 * time.Millisecond
228+ result, err = bufferedChannelQueue.TakeWithTimeout (timeout) // Result should be 1
229+ result, err = bufferedChannelQueue.TakeWithTimeout (timeout) // Result should be 2
230+ result, err = bufferedChannelQueue.TakeWithTimeout (timeout) // Result should be 3
231+ ```
232+
171233## Actor (inspired by Akka/Erlang)
172234
173235### Actor common(send/receive/spawn/states)
0 commit comments