#go
#Вперед
Вопрос:
В приведенном ниже синтаксисе_1,
array := [...]float64{7.0, 8.5, 9.1}
и синтаксис_2,
type People interface {
SayHello()
ToString()
}
type Student struct {
Person
university string
course string
}
type Developer struct {
Person
company string
platform string
}
func main(){
alex := Student{Person{"alex", 21, "111-222-XXX"}, "MIT","BS CS"}
john := Developer{Person{"John", 35, "111-222-XXX"}, "Accel North America", "Golang"}
jithesh := Developer{Person{"Jithesh", 33, "111-222-XXX"}, "Accel North America", "Hadoop"}
//An array with People types
peopleArr := [...]People{alex, john,jithesh}
}
1) Что означает этот синтаксис float64{7.0, 8.5, 9.1}
amp; People{alex, john,jithesh}
? это больше похоже на парадигму (способ программирования), чем на синтаксис
2) Можете ли вы предоставить ссылку на значение / назначение [...]
синтаксиса? Я вижу преобразование чего-либо в []
тип
Комментарии:
1. Все это здесь: golang.org/ref/spec . 1) Составной литерал , это синтаксис, а не «парадигма». 2) Создайте массив, длина которого равна количеству элементов, предоставленных литералу.
2. @mkopriva golang.org/search ? q=[…]
3.
{1, 2, 3}
является составным литералом , и «Обозначение...
определяет длину массива, равную максимальному индексу элемента плюс один».4. @overexchange на что вы намекаете этой ссылкой? Что, его трудно найти? Воспользуйтесь ссылкой в моем первом комментарии и попробуйте выполнить поиск по этой странице с помощью CTRL / CMD F, это более эффективно.
5. Безымянные массивы * не могут реализовать интерфейсы. Это объекты, которые реализуют интерфейсы, поэтому у вас есть массив объектов, и эти объекты реализуют интерфейс. Редактировать: я использую здесь объекты, но, возможно, правильнее было бы сказать структуры.
Ответ №1:
Волнистые скобки используются для определения составного литерала. Значение, которое содержит внутри себя более одного значения. В вашем первом примере создается массив значений с плавающей запятой [...]float64{7.0, 8.5, 9.1}
является литералом для массива значений с плавающей запятой с 3 элементами. Во втором примере создается несколько литералов для предопределенных типов структур и еще один массив. Person{"alex", 21, "111-222-XXX"}
является литералом для структуры типа Person. И [...]People{alex, john,jithesh}
— это массив типа People, содержащий 3 элемента.
Комментарии:
1. Могу ли я сказать,
People{alex, john, jitesh}
является ли составной литерал для структуры типаPeople
? где namealex
указывает на литерал (объект) для структуры типаStudent
?2. Тип People — это интерфейс, поэтому все, что реализует этот интерфейс, может быть членом этого массива. Для работы этого кода и разработчику, и учащемуся необходимо реализовать интерфейс People либо напрямую, либо через встроенную структуру Person.
3. Но
People{alex, john, jitesh}
само по себе недопустимо. Необходимо[...]
, чтобы это был массив людей. Или просто[]
, чтобы сделать его частью людей.4.
[...]People{}
является массивом.[]People{}
это фрагмент. Это два разных типа.5.
[...]People{}
создало бы пустой массив из нулевых элементов, но[...]People{alex, john, jitesh}
создало бы заполненный массив из трех элементов