Преобразование типа в синтаксис array — GO

#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 ? где name alex указывает на литерал (объект) для структуры типа Student ?

2. Тип People — это интерфейс, поэтому все, что реализует этот интерфейс, может быть членом этого массива. Для работы этого кода и разработчику, и учащемуся необходимо реализовать интерфейс People либо напрямую, либо через встроенную структуру Person.

3. Но People{alex, john, jitesh} само по себе недопустимо. Необходимо [...] , чтобы это был массив людей. Или просто [] , чтобы сделать его частью людей.

4. [...]People{} является массивом. []People{} это фрагмент. Это два разных типа.

5. [...]People{} создало бы пустой массив из нулевых элементов, но [...]People{alex, john, jitesh} создало бы заполненный массив из трех элементов