@@ -44,10 +44,14 @@ Thus I implemented fpGo. I hope you would like it :)
44
44
45
45
* Java8Stream-like Collection
46
46
47
+ * Queue (LinkedListQueue/ChannelQueue/BufferedChannelQueue/ConcurrentQueue)
48
+
47
49
* PythonicGenerator-like Coroutine(yield/yieldFrom)
48
50
49
51
* Akka/Erlang-like Actor model(send/receive/spawn/states)
50
52
53
+ * ** network/SimpleHTTP** inspired by [ Retrofit] ( https://github.com/square/retrofit )
54
+
51
55
# Special thanks
52
56
* 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)
53
57
* Credit: https://github.com/logic-building/functional-go
@@ -143,6 +147,64 @@ for _, v := range s.ToArray() {
143
147
fmt.Println (tempString) // tempString would be "1234"
144
148
```
145
149
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
+
146
208
## Actor (inspired by Akka/Erlang)
147
209
148
210
### Actor common(send/receive/spawn/states)
0 commit comments