@lindou

Как задать тип для структуры, где может быть массив или строка?

Есть json, где может быть строка или массив строк
{
    "data": "string|array|null"
}


{
    "data": "string"
}

или может прилететь такое

{
    "data": ["string", "string 2", "string 3...."]
}


Структура
type DataStruct struct {
	Data   string `json:"data"`
}


Собственно можно как-то задать Data что то типа string|map, как подобное вообще реализовать?
Возможно как-то через дженерики, а затем проверять тип?
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 3
@lindou Автор вопроса
В принципе стало ясно, но не знаю, правильно ли так делать.

type DataStruct struct {
  Data   any `json:"data"`
}

//.....

if reflect.ValueOf(DataStruct.Data).Kind() == reflect.Slice {
 //...
}
Ответ написан
@mayton2019
Bigdata Engineer
Ты переусложняешь. Сделай просто массив строк.

{
    "data": ["string"]
}


Это покрывает все твои кейсы с 1 строкой и с null. И маппинг упрощается.
Ответ написан
DollyPapper
@DollyPapper
В Golang есть такое понятие как дженерики.

В вашем примере код может выглядеть как нибудь так:
type StringOrStrings interface {
	string | []string
}

type DataStruct[T StringOrStrings] struct {
	Data T
}

StringOrStrings interface в данном случае выступает как ограничитель типа. Далее советую подробней ознакомится с документацией по Generics на оф. сайте Go.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы