2015-08-05 4 views
-3

я заметил в Go docs это определение было включено:В чем разница между строкой map [string] [] и map [string] string?

type Values map[string][]string 

Я думал, что это было ошибкой, но тогда я попробовал этот код и он компилирует (Playground):

пакет основной

import "fmt" 

func main() { 
    type MyType map[string][]string 

    foobar := make(MyType) 

    fmt.Println(foobar) 
} 

Это функционально эквивалентно map[string]string, или есть некоторые ди fference?

ответ

5

Они разные. Одним из них является отображением строк среза строк, против отображения строк в одну строку

[] в []string обозначает кусочек

http://play.golang.org/p/nv7wSWW0F7

+6

В Go они [ломтики] (https://golang.org/ref/spec#Slice_types), не то же самое, что [Массивы] (https://golang.org/ref/spec#Array_types). – icza

1

Один карты строковых ломтиков в то время как другое - это карта строк. Одна структура имеет один размер, map[string][]string имеет два. На каждом ключе k у вас будут предметы 0-n в разрезе. Таким образом, доступ требует другого уровня направления, такого как fmt.Println(myInts[k][0]), как и для fmt.Println(myInts[k]). Поместите данные в нее, и разница будет более очевидной.

Смежные вопросы