Number
#2
| URL | https://gw.tape.network/track/9KnotGYNAox3mhyV59nnQ4e61JnjdR5iWnhgvDK4y3LT |
|---|---|
| Tape | 9W8LW...mbFes |
| Owner | 7WZP8...YNwnj ↗ |
| Content Key | ARmkj...zZ9Jb |
| Status | ● Ready |
| Type | User |
| Filename | obj-1059-3353.go |
| Content-Type | text/plain |
| Encoding | Inline |
| Size | 677 B |
| Spool Group | 9 |
00000000 70 61 63 6b 61 67 65 20 63 6f 75 6e 74 65 72 0a |package counter.|
00000010 0a 69 6d 70 6f 72 74 20 22 73 79 6e 63 22 0a 0a |.import "sync"..|
00000020 2f 2f 20 43 6f 75 6e 74 65 72 20 69 73 20 61 20 |// Counter is a |
00000030 67 6f 72 6f 75 74 69 6e 65 2d 73 61 66 65 20 69 |goroutine-safe i|
00000040 6e 74 65 67 65 72 20 63 6f 75 6e 74 65 72 2e 0a |nteger counter..|
00000050 74 79 70 65 20 43 6f 75 6e 74 65 72 20 73 74 72 |type Counter str|
00000060 75 63 74 20 7b 0a 09 6d 75 20 20 20 20 73 79 6e |uct {..mu syn|
00000070 63 2e 4d 75 74 65 78 0a 09 76 61 6c 75 65 20 69 |c.Mutex..value i|
00000080 6e 74 36 34 0a 7d 0a 0a 2f 2f 20 4e 65 77 20 72 |nt64.}..// New r|
00000090 65 74 75 72 6e 73 20 61 20 63 6f 75 6e 74 65 72 |eturns a counter|
000000a0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 | initialized to |
000000b0 69 6e 69 74 69 61 6c 2e 0a 66 75 6e 63 20 4e 65 |initial..func Ne|
000000c0 77 28 69 6e 69 74 69 61 6c 20 69 6e 74 36 34 29 |w(initial int64)|
000000d0 20 2a 43 6f 75 6e 74 65 72 20 7b 0a 09 72 65 74 | *Counter {..ret|
000000e0 75 72 6e 20 26 43 6f 75 6e 74 65 72 7b 76 61 6c |urn &Counter{val|
000000f0 75 65 3a 20 69 6e 69 74 69 61 6c 7d 0a 7d 0a 0a |ue: initial}.}..|
00000100 2f 2f 20 49 6e 63 20 69 6e 63 72 65 6d 65 6e 74 |// Inc increment|
00000110 73 20 74 68 65 20 63 6f 75 6e 74 65 72 20 62 79 |s the counter by|
00000120 20 6f 6e 65 20 61 6e 64 20 72 65 74 75 72 6e 73 | one and returns|
00000130 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 2e 0a | the new value..|
00000140 66 75 6e 63 20 28 63 20 2a 43 6f 75 6e 74 65 72 |func (c *Counter|
00000150 29 20 49 6e 63 28 29 20 69 6e 74 36 34 20 7b 0a |) Inc() int64 {.|
00000160 09 72 65 74 75 72 6e 20 63 2e 41 64 64 28 31 29 |.return c.Add(1)|
00000170 0a 7d 0a 0a 2f 2f 20 41 64 64 20 61 64 64 73 20 |.}..// Add adds |
00000180 64 65 6c 74 61 20 74 6f 20 74 68 65 20 63 6f 75 |delta to the cou|
00000190 6e 74 65 72 20 61 6e 64 20 72 65 74 75 72 6e 73 |nter and returns|
000001a0 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 2e 0a | the new value..|
000001b0 66 75 6e 63 20 28 63 20 2a 43 6f 75 6e 74 65 72 |func (c *Counter|
000001c0 29 20 41 64 64 28 64 65 6c 74 61 20 69 6e 74 36 |) Add(delta int6|
000001d0 34 29 20 69 6e 74 36 34 20 7b 0a 09 63 2e 6d 75 |4) int64 {..c.mu|
000001e0 2e 4c 6f 63 6b 28 29 0a 09 64 65 66 65 72 20 63 |.Lock()..defer c|
000001f0 2e 6d 75 2e 55 6e 6c 6f 63 6b 28 29 0a 0a 09 63 |.mu.Unlock()...c|
00000200 2e 76 61 6c 75 65 20 2b 3d 20 64 65 6c 74 61 0a |.value += delta.|
00000210 09 72 65 74 75 72 6e 20 63 2e 76 61 6c 75 65 0a |.return c.value.|
00000220 7d 0a 0a 2f 2f 20 56 61 6c 75 65 20 72 65 74 75 |}..// Value retu|
00000230 72 6e 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 |rns the current |
00000240 63 6f 75 6e 74 65 72 20 76 61 6c 75 65 2e 0a 66 |counter value..f|
00000250 75 6e 63 20 28 63 20 2a 43 6f 75 6e 74 65 72 29 |unc (c *Counter)|
00000260 20 56 61 6c 75 65 28 29 20 69 6e 74 36 34 20 7b | Value() int64 {|
00000270 0a 09 63 2e 6d 75 2e 4c 6f 63 6b 28 29 0a 09 64 |..c.mu.Lock()..d|
00000280 65 66 65 72 20 63 2e 6d 75 2e 55 6e 6c 6f 63 6b |efer c.mu.Unlock|
00000290 28 29 0a 0a 09 72 65 74 75 72 6e 20 63 2e 76 61 |()...return c.va|
000002a0 6c 75 65 0a 7d |lue.}|