2016-02-06 73 views
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

是不是如果不是,我怎样通过struct

回答

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

tConfig.Temperatures[i]。对于来自匿名struct { Temperature }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 
} 

Temperaturesconfiguration.Temperature类型片。

+0

谢谢,那确实有用。不知道为什么。我明白为什么我可以做't.AppId',但't.Temperature'不是嵌套的,'t'是'Temperature',还是我没有正确地得到它? – Cimm

+0

@Cimm:查看我的修改答案以获得解释。 – peterSO

+0

完美答案!非常感谢! – Cimm