[]User{...} users := map[int]string{
1: "Niyaz",
2: "Mark",
} users := map[int]string{
1: "Niyaz",
2: "Mark",
}
fmt.Println(users[1]) // Niyaz
ages := map[string]int{
"Niyaz": 30,
"Mark": 24,
}
fmt.Println(ages["Niyaz"]) // 30 map[KeyType]ValueType map[string]int
map[int]string
map[string][]int
map[UserID]User
map[Point]bool words := []string{"go", "map", "go", "slice", "map", "go"}
counts := make(map[string]int)
for _, word := range words {
counts[word]++
}
fmt.Println(counts) // map[go:3 map:2 slice:1]
m := make(map[string]int)
m["go"] = 1
fmt.Println(m["go"]) statusCodes := map[int]string{
200: "OK",
404: "Not Found",
500: "Internal Server Error",
} m := map[string]int{} users := make(map[int]User, 10_000) len(users) // количество элементов, а не capacity var m map[string]int
fmt.Println(m == nil) // true
var m map[string]int
fmt.Println(m["missing"]) // 0
fmt.Println(len(m)) // 0
for k, v := range m {
fmt.Println(k, v) // не выполнится ни разу
} var m map[string]int
m["go"] = 1 // panic: assignment to entry in nil map m := make(map[string]int)
m["go"] = 1 m := map[string]int{}
m["go"] = 1 score := users["alex"] m := map[string]int{
"a": 10,
}
fmt.Println(m["a"]) // 10
fmt.Println(m["b"]) // 0 scores := map[string]int{
"alex": 0,
}
fmt.Println(scores["alex"]) // 0
fmt.Println(scores["mark"]) // 0 value, ok := scores["alex"]
if ok {
fmt.Println("key exists", value)
} else {
fmt.Println("key not found")
} _, ok := scores["alex"] m := make(map[string]int)
m["go"] = 1 // добавили
m["go"] = 2 // обновили views := make(map[string]int)
views["/blog/go-map"]++ delete(m, "go") m := map[string]int{
"go": 1,
}
delete(m, "missing") // ok var m map[string]int
delete(m, "go") // ok m := map[string]int{
"a": 1,
"b": 2,
}
fmt.Println(len(m)) // 2 var m map[string]int
fmt.Println(len(m)) // 0 m := make(map[[]int]string) // invalid map key type []int hits := make(map[string]map[string]int) func addHit(hits map[string]map[string]int, path, country string) {
if hits[path] == nil {
hits[path] = make(map[string]int)
}
hits[path][country]++
} type HitKey struct {
Path string
Country string
}
hits := make(map[HitKey]int)
hits[HitKey{Path: "/blog", Country: "ru"}]++ seen := make(map[string]bool)
seen["go"] = true
if seen["go"] {
fmt.Println("already seen")
}
seen := make(map[string]struct{})
seen["go"] = struct{}{}
if _, ok := seen["go"]; ok {
fmt.Println("already seen")
} type User struct {
Name string
City string
}
users := []User{
{Name: "Niyaz", City: "Kazan"},
{Name: "Mark", City: "Moscow"},
{Name: "Ilya", City: "Kazan"},
}
byCity := make(map[string][]User)
for _, user := range users {
byCity[user.City] = append(byCity[user.City], user)
}
m := map[string]int{
"a": 1,
"b": 2,
}
values := make([]int, 0, len(m))
for _, v := range m {
values = append(values, v)
}
fmt.Println(values) m := map[string]int{
"b": 2,
"a": 1,
"c": 3,
}
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, m[k])
} type Pair struct {
Key string
Value int
}
pairs := make([]Pair, 0, len(m))
for k, v := range m {
pairs = append(pairs, Pair{Key: k, Value: v})
} m := map[string]int{
"a": 1,
"b": 2,
"c": 3,
}
for k, v := range m {
fmt.Println(k, v)
}
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, m[k])
} func update(m map[string]int) {
m["go"] = 10
}
func main() {
m := map[string]int{"go": 1}
update(m)
fmt.Println(m["go"]) // 10
} func replace(m map[string]int) {
m = map[string]int{"go": 100}
}
func main() {
m := map[string]int{"go": 1}
replace(m)
fmt.Println(m["go"]) // 1
} m1 := map[string]int{"a": 1}
m2 := m1
m2["a"] = 100
fmt.Println(m1["a"]) // 100 func cloneMap(src map[string]int) map[string]int {
dst := make(map[string]int, len(src))
for k, v := range src {
dst[k] = v
}
return dst
} src := map[string][]int{
"a": {1, 2, 3},
}
dst := make(map[string][]int, len(src))
for k, v := range src {
dst[k] = v
}
dst["a"][0] = 100
fmt.Println(src["a"][0]) // 100 dst := make(map[string][]int, len(src))
for k, v := range src {
copied := make([]int, len(v))
copy(copied, v)
dst[k] = copied
} var m map[string]int
fmt.Println(m == nil) // true m1 := map[string]int{"a": 1}
m2 := map[string]int{"a": 1}
fmt.Println(m1 == m2) // compile error fmt.Println(reflect.DeepEqual(m1, m2)) func equalMaps(a, b map[string]int) bool {
if len(a) != len(b) {
return false
}
for k, av := range a {
bv, ok := b[k]
if !ok || av != bv {
return false
}
}
return true
} m := map[string]int{"a": 1}
p := &m["a"] // invalid operation type User struct {
Name string
}
users := map[int]*User{
1: {Name: "Niyaz"},
}
users[1].Name = "Niyaz Updated" m := map[string]User{
"a": {Name: "old"},
}
u := m["a"]
u.Name = "new"
m["a"] = u type Cache struct {
items map[string]string
}
var c Cache
c.items["a"] = "b" // panic func NewCache() *Cache {
return &Cache{
items: make(map[string]string),
}
} func (c *Cache) Set(k, v string) {
if c.items == nil {
c.items = make(map[string]string)
}
c.items[k] = v
}
m := make(map[string]int, len(items))
m := make(map[string]int)
for i := 0; i < 10; i++ {
go func(i int) {
m[fmt.Sprint(i)] = i
}(i)
} fatal error: concurrent map writes
type SafeCounter struct {
mu sync.RWMutex
m map[string]int
}
func NewSafeCounter() *SafeCounter {
return &SafeCounter{
m: make(map[string]int),
}
}
func (c *SafeCounter) Inc(key string) {
c.mu.Lock()
defer c.mu.Unlock()
c.m[key]++
}
func (c *SafeCounter) Get(key string) int {
c.mu.RLock()
defer c.mu.RUnlock()
return c.m[key]
} var cache sync.Map
cache.Store("go", 1)
value, ok := cache.Load("go")
if ok {
fmt.Println(value)
}
cache.Delete("go") var data map[string]interface{} var data map[string]any var payload map[string]any
err := json.Unmarshal(body, &payload) name, ok := payload["name"].(string)
if !ok {
return errors.New("name must be string")
} type CreateUserRequest struct {
Name string `json:"name"`
Age int `json:"age"`
} s := "golang"
counts := make(map[rune]int)
for _, r := range s {
counts[r]++
}
fmt.Println(counts) s := "привет"
for _, r := range s {
fmt.Println(string(r))
} func sortString(s string) string {
r := []rune(s)
sort.Slice(r, func(i, j int) bool {
return r[i] < r[j]
})
return string(r)
}
func groupAnagrams(words []string) map[string][]string {
groups := make(map[string][]string)
for _, word := range words {
key := sortString(word)
groups[key] = append(groups[key], word)
}
return groups
} type User struct {
ID int
Name string
Age int
} settings := map[string]string{
"theme": "dark",
"lang": "ru",
} user := map[string]any{
"id": 1,
"name": "Niyaz",
"age": 30,
} func findUser(users []User, id int) (User, bool) {
for _, user := range users {
if user.ID == id {
return user, true
}
}
return User{}, false
} usersByID := make(map[int]User)
for _, user := range users {
usersByID[user.ID] = user
}
user, ok := usersByID[42] m := make(map[string]int) m := map[string]int{"a": 1, "b": 2} m := make(map[string]int, 1000) m["a"] = 10 v := m["a"] v, ok := m["a"] delete(m, "a") len(m) for k, v := range m {
fmt.Println(k, v)
} keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
} dst := make(map[string]int, len(src))
for k, v := range src {
dst[k] = v
} type SafeMap struct {
mu sync.RWMutex
m map[string]int
} var m map[string]int
m["a"] = 1 // panic m := make(map[string]int) for k := range m {
fmt.Println(k)
} go func() { m["a"] = 1 }()
go func() { m["b"] = 2 }() m2 := m1 &m["a"] // нельзя