2016-02-06 27 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