Использование логики ИЛИ при проверке нескольких ключей в интерфейсе map [string] {} - PullRequest
0 голосов
/ 16 января 2019

У меня есть интерфейс map [string] {} с именем mapped:

mapped map[stringinterface{}

Я хочу выполнить итерацию, проверяя, существует ли какой-либо из этих ключей:

  • столбцы
  • Строка

Тогда, если это так, я хочу добавить строку или столбец к фрагменту строк с именем:

  • columnOrRowArray

Я понимаю, что, если мне просто нужно было найти, например, столбцы, внутри сопоставленного, я могу сделать это:

var columnOrRowArray []string

if columnsOrRows, ok := mapped["columns"].([]interface{}); ok {
    for _, columnOrRow := range columnsOrRows {
        if columnOrRowValueIsString, ok = columnOrRow.(string); ok {
            columnOrRowArray = append(columnOrRowArray, columnOrRowValueIsString)
        }
    }
}

Что было бы чисто, если бы я не дублировал вышеизложенное для использования логики строк для сопоставленных ["строк"]?

Я хочу сделать что-то, что в основном это:

columnsOrRows, ok := mapped["columns"].([]interface{}) || mapped["rows"].([]interface{}); ok {

Таким образом, на простом английском языке, «если сопоставляемый имеет ключ столбца или строки, присвойте переменной columnsOrRows»

Очевидно, я знаю, что синтаксис для этого неправильный, но я не могу найти пример того, как кто-то делает это

1 Ответ

0 голосов
/ 16 января 2019

Тест для обеих клавиш:

columnsOrRows, ok := mapped["columns"].([]interface{})
if !ok {
    columnsOrRows, ok = mapped["rows"].([]interface{})
}

if ok {
    for _, columnOrRow := range columnsOrRows {
        if columnOrRowValueIsString, ok = columnOrRow.(string); ok {
            columnOrRowArray = append(columnOrRowArray, columnOrRowValueIsString)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...