Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
790 B
44 lines
790 B
// Package intern interns strings. |
|
// Interning is best effort only. |
|
// Interned strings may be removed automatically |
|
// at any time without notification. |
|
// All functions may be called concurrently |
|
// with themselves and each other. |
|
package intern |
|
|
|
import "sync" |
|
|
|
var ( |
|
pool sync.Pool = sync.Pool{ |
|
New: func() interface{} { |
|
return make(map[string]string) |
|
}, |
|
} |
|
) |
|
|
|
// String returns s, interned. |
|
func String(s string) string { |
|
m := pool.Get().(map[string]string) |
|
c, ok := m[s] |
|
if ok { |
|
pool.Put(m) |
|
return c |
|
} |
|
m[s] = s |
|
pool.Put(m) |
|
return s |
|
} |
|
|
|
// Bytes returns b converted to a string, interned. |
|
func Bytes(b []byte) string { |
|
m := pool.Get().(map[string]string) |
|
c, ok := m[string(b)] |
|
if ok { |
|
pool.Put(m) |
|
return c |
|
} |
|
s := string(b) |
|
m[s] = s |
|
pool.Put(m) |
|
return s |
|
}
|
|
|