Наличие нескольких вариантов в кейсе, а затем al oop внутри кейса go - PullRequest
1 голос
/ 25 мая 2020

У меня есть функция, которая принимает интерфейс {} Затем я выполняю переключение, регистр для типа и, если это срез, я хочу перебирать элементы. Проблема, с которой я сталкиваюсь, заключается в том, что у меня не может быть несколько вариантов в селекторе case, например, у меня не может быть [] int, [] float32, а затем задать диапазон значений.

Я хочу сделать что-то вроде этого

func digestCollection(obj interface{}) ([]byte, error) {

    switch v := obj.(type) {
    case []int64, []float64:
      for _, values := range v {
        // do something with v whether its an int or float
     }
    }
}

Но я получаю сообщение об ошибке, в котором говорится, что я не могу выполнить итерацию по интерфейсу.

1 Ответ

2 голосов
/ 25 мая 2020

В переключателе типа, если есть случай одного типа, тогда v относится к этому типу:

switch v:=obj.(type) {
   case []int64:
     // Here, v is []int64
   case []float64:
     // here, v is []float64
}

Однако, если существует несколько вариантов или это случай по умолчанию, тогда тип v - это тип obj:

switch v:=obj.(type) {
   case []int64,[]float64:
   // Here, type of v is type of obj

, потому что v не может иметь определенный тип, если это либо массив int, либо массив float64. Код, сгенерированный для этих двух, будет отличаться.

Вы можете попробовать использовать отражение для go через массив или написать два цикла, один для int и один для float64.

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