Голанг, что делает следующее []
Я новичок в 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 не следует путать со срезами. Чтобы получить хорошее представление о массивах и срезах, прочтите официальные сообщения в блоге:
В этой части объявляется литерал массива с четырьмя строками:
[...]string{"North", "East", "South", "West"}
Тогда эта часть получает d
th элемент из массива:
[...]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]
}