Передача интерфейса {} или [] interface {} в Голанг - PullRequest
0 голосов
/ 10 мая 2018

С помощью этого фрагмента, почему он позволяет интерфейсу {} проходить в функцию, но не [] интерфейсу.А какая разница?Я знаю, что говорит ошибка (прокомментировал ее в функции), но я не уверен, что означает ошибка.

https://play.golang.org/p/689R_5dswFX

package main

type smsSendRequest struct {
    Recipients     string `json:"recipients"`
}

// func action(pass interface{}) {
//     //works
// }

func action(pass []interface{}) {
    //cannot use data (type *smsSendRequest) as type []interface {} in argument to action
}

func main() {
    to := "15551234567"
    var data = &smsSendRequest{
        Recipients:     to,
    }
    action(data)
}

1 Ответ

0 голосов
/ 10 мая 2018

Тип interface{} может использоваться как очень универсальный тип, который позволяет назначать ему любой другой тип.

Так что, если функция получает interface{}, вы можете передать ей любое значение.

Это потому, что в Go для типа, удовлетворяющего интерфейсу, он должен просто реализовать все методы, которые объявляет интерфейс.

Поскольку interface{} является пустым интерфейсом, его удовлетворяет любой тип..

С другой стороны, для типа, удовлетворяющего []interface{}, это должен быть фактический фрагмент пустых интерфейсов.

Так что если вам нужна универсальная функция, которая может принимать любое значение, простоиспользуйте interface{}, как показано в вашем примере.

Обратите внимание, что interface{} позволит вам передавать либо значения, либо ссылки на указатели, так что вы можете передавать указатели или значения нечетко в эту функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...