Голанг, что делает следующее []

Я новичок в golang, и у меня есть основной вопрос. У меня есть следующий код, взятый из примера из Интернета

func (d Direction) String() string {
    return [...]string{"North", "East", "South", "West"}[d]
}

Я не понимаю, что значит [d] делать в теле метода?

3 ответа

[d]это просто индексное выражение, оно индексирует массив, созданный с предшествующим ему составным литералом.

Эта:

[...]string{"North", "East", "South", "West"}

Составной литерал массива, он создает массив типа элемента string с перечисленными элементами, а последующие [d]индексирует этот массив. Метод возвращаетd элемент этого массива размером 4.

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

Обозначение ... указывает длину массива, равную максимальному индексу элемента плюс один.

Массивы в Go не следует путать со срезами. Чтобы получить хорошее представление о массивах и срезах, прочтите официальные сообщения в блоге:

Блог Go: Go Slices: использование и внутреннее устройство

Блог Go: Массивы, срезы (и строки): механика добавления

В этой части объявляется литерал массива с четырьмя строками:

[...]string{"North", "East", "South", "West"}

Тогда эта часть получает dth элемент из массива:

[...]string{"North", "East", "South", "West"}[d]

Direction должно быть int чтобы это работало.

@icza и @Burak Serdar упомянули, что [d] является индексным выражением.

Ниже приведен просто рабочий пример, чтобы увидеть результат.

package main

import "fmt"

type Direction int

func (d Direction) String() string {
    return [...]string{"North", "East", "South", "West"}[d]
}

func main() {
    n:=Direction(0)  // d=0
    fmt.Println(n)
    w:=Direction(3)  // d=3
    fmt.Println(w)
}

Выход:

North
West

Чтобы быть более понятным,

return [...]string{"North", "East", "South", "West"}[d]

может быть расширен как

func (d Direction) String() string {
    var directions = [...]string{"North", "East", "South", "West"}
    return directions[d]
}
Другие вопросы по тегам