2016-02-06 3 views
2

Немного 2 приложений для файлов, которые читают файл конфигурации и сохраняют его в struct. Как пройти часть конфигурации struct функции fetchTemperature?Как передать вложенную структуру в Go

Конфигурация

package configuration 

type Config struct { 
    Temperatures []struct { 
     Temperature 
    } 
} 

type Temperature struct { 
    AppId string 
} 

func Load() Config { 
    var c Config 
    // -- 8< -- snip -- 8< -- 
    return c 
} 

Главная

package main 

import "configuration" 

var c configuration.Config = configuration.Load() 

func main() { 
    for _, t := range c.Temperatures { 
     fetchTemperature(t) 
    } 
} 

func fetchTemperature(t configuration.Temperature) { 
    // -- 8< -- snip -- 8< -- 
} 

дает мне:

cannot use t (type struct { configuration.Temperature }) as type configuration.Temperature in argument to fetchTemperature

Не t из configuration.Temperature, а если нет, то как мне пройти struct?

ответ

3
type Config struct { 
    Temperatures []struct { 
     Temperature 
    } 
} 

t является Config.Temperatures[i]. Для Temperature от анонимного struct { Temperature }, напишите t.Temperature, чтобы выбрать поле из структуры.

Например,

package main 

import "configuration" 

var c configuration.Config = configuration.Load() 

func main() { 
    for _, t := range c.Temperatures { 
     fetchTemperature(t.Temperature) 
    } 
} 

func fetchTemperature(t configuration.Temperature) { 
    // -- 8< -- snip -- 8< -- 
} 

Я подозреваю, что ваша путаница возникла потому, что вы написали

type Config struct { 
    Temperatures []struct { 
     Temperature 
    } 
} 

Temperatures является срез типа анонимного struct { configuration.Temperature }.

То, что вы, вероятно, хотел было

type Config struct { 
    Temperatures []Temperature 
} 

Temperatures является срез типа configuration.Temperature.

+0

спасибо, что сделал работа. Не знаю, почему. Я понимаю, почему я могу делать 't.AppId', но' t.Temperature' не вложен, 't' является' Temperature', или я не получаю это правильно? – Cimm

+0

@Cimm: См. Мой пересмотренный ответ для объяснения. – peterSO

+0

Отличный ответ! Спасибо, тонну! – Cimm

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