(s string)
| 19 | } |
| 20 | |
| 21 | func (pool *StringPool) Get(s string) *string { |
| 22 | // Check if the entry is already in the pool with a slightly cheaper |
| 23 | // (read-only) mutex. |
| 24 | pool.RLock() |
| 25 | stored, ok := pool.strings[s] |
| 26 | pool.RUnlock() |
| 27 | if ok { |
| 28 | return stored |
| 29 | } |
| 30 | |
| 31 | pool.Lock() |
| 32 | defer pool.Unlock() |
| 33 | stored, ok = pool.strings[s] |
| 34 | if ok { |
| 35 | return stored |
| 36 | } |
| 37 | pool.strings[s] = &s |
| 38 | return &s |
| 39 | } |
no outgoing calls