2016-07-13 4 views
2

Я получение объекта под названием DockerInfo который имеет поле внутри него под названием SystemStatus которое [][2]string, то для того, чтобы получить доступ к элементам внутри SystemStatus Я делаю это, например, если четвёртый элемент SystemStatus является ["Nodes","6"] то доступ к числу 6Как преобразовать [] [2] строку в карту [string] string in go?

dockerinfo.SystemStatus[3][1] 

Но Nodes элементы не фиксируется в 4-м положении всегда, так что я не могу использовать индексацию и вместо этого я хочу, чтобы найти число узлов, например, путем написания

dockerinfo.SystemStatus["Nodes"] 

Как я могу это сделать? Или как преобразовать формат SystemStatus в формат map[string]string?

ответ

0

Используйте простой for цикл для перебора значений среза dockerinfo.SystemStatus и сравнить первое значение "Nodes":

for _, v := range dockerinfo.SystemStatus { 
    if v[0] == "Nodes" { 
     // Got it! 
     value := v[1] // This will be "6" in your example 
     fmt.Println("Nodes value:", value) 
     break 
    } 
} 

Это value будет типа string но выглядит он держит числовые данные. Если вы хотите как int, например, вы можете использовать strconv.Atoi() разобрать номер:

value := v[1] 
if n, err := strconv.Atoi(value); err == nil { 
    // n is of type int, use it like so 
} else { 
    // Not a number! 
} 

Если у вас есть для поиска значения от много раз, это может быть выгодно, чтобы построить карту от него. Это, как вы могли бы сделать это:

ssmap := map[string]string{} 
for _, v := range dockerinfo.SystemStatus { 
    ssmap[v[0]] = v[1] 
} 

// And then you can do simple lookup: 
if nodes, ok := ssmap["Nodes"]; ok { 
    fmt.Println("Nodes value:", nodes) 
} else { 
    // Nodes not found! 
} 
+0

спасибо, но мне нужно, чтобы получить доступ к другим, чем Nodes элемента, так как я могу отобразить их в карте, например, мне нужно, чтобы получить доступ узлов, состояние, контейнеры ... –

+0

@ saidsaifi См. отредактированный ответ, включенное в карту. – icza

+0

Спасибо, я поддержал и принял ваш ответ, но я до сих пор не достиг 15 репутаций –

Смежные вопросы