Используемый вами термин не conversion/casting
, это утверждение типа, которое используется для получения базового значения интерфейса. Поскольку интерфейс, который вы используете для переноса содержимого функции при возврате данных, является частью структуры. Вот причина ошибки:
паника: преобразование интерфейса: интерфейс {} is [] struct {Key string;
Строка значения}, а не [] * ec2.Tag
Утверждение типа неверно, потому что вы используете []*ec2.Tag
тип объявления, который должен быть фрагментом структуры []struct
, возвращаемой функцией c.GetTagCollection()
. Поэтому вы должны набрать assert для этого типа как:
result := c.GetTagCollection().([]struct)
Утверждение типа, используемое в присваивании или инициализации специальной формы, поэтому вы проверяете, работает ли утверждение типа:
v, ok = x.(T)
v, ok := x.(T)
Для выражения x типа интерфейса и типа T основное выражение
x.(T)
утверждает, что x не равен nil и что значение, хранящееся в x, имеет тип T. Обозначение x. (T) называется утверждением типа.
Точнее, если T не является типом интерфейса, x. (T) утверждает, что
динамический тип x идентичен типу T. В этом случае T должен
реализовать тип интерфейса (x); в противном случае утверждение типа
неверно, так как для x невозможно сохранить значение типа T. Если
T является типом интерфейса, x. (T) утверждает, что динамический тип x
реализует интерфейс T.
Примечание : Если утверждение типа выполнено, значением выражения является значение, сохраненное в x, а его тип - T. Если утверждение типа ложно, возникает паника во время выполнения.
Редактировать : Голанг строг в отношении типов. Таким образом, вы не можете присвоить значение одного типа другому типу, пока не преобразуете значение в другой тип. AWS создает свои собственные типы, используя предоставленную строку. Возьмем для примера:
package main
import (
"fmt"
)
type MyInt int
func main() {
var x int
x = 1
var y MyInt
y = 1
fmt.Println(x==y)
}
Приведенный выше код выдаст ошибку несоответствия типов
prog.go: 14: 18: недопустимая операция: x == y (несовпадающие типы int и
Минт)
Рабочий код на Детская площадка