Подтвердить что ты не робот

Создать карту списков

Я хотел бы создать карту экземпляров container/list.List. Правильно ли это сделать?

package main

import (
    "fmt"
    "container/list"
)

func main() {
    x := make(map[string]*list.List)

    x["key"] = list.New()
    x["key"].PushBack("value")

    fmt.Println(x["key"].Front().Value)
}
4b9b3361

Ответ 1

Всякий раз, когда я хотел использовать List, я обнаружил, что срез был правильным выбором, например

package main

import "fmt"

func main() {
    x := make(map[string][]string)

    x["key"] = append(x["key"], "value")
    x["key"] = append(x["key"], "value1")

    fmt.Println(x["key"][0])
    fmt.Println(x["key"][1])
}

Ответ 2

Мой любимый синтаксис для объявления карты срезов:

mapOfSlices := map[string][]string{
    "first": {},
    "second": []string{"one", "two", "three", "four", "five"},
    "third": []string{"quarter", "half"},
}

Ответ 3

нет ничего технически неправильного в том, что вы написали, но вы должны определить свой собственный тип вокруг map[string]*list.List, чтобы избежать некоторых ловушек, например, пытаться вызвать метод .Front() на указателе nil. Или сделайте это map[string]list.List, чтобы избежать этой ситуации. List.List - это всего лишь пара указателей и значение длины; используя указатель list.List на вашей карте, просто добавляет дополнительный случай указателя nil в верхней части случая пустого списка. В любой ситуации вы должны определить новую структуру для этого варианта использования.

Я хотел бы написать так: http://play.golang.org/p/yCTYdGVa5G