我是Go的新手,我正在寻找是否有一种方法可以接收任何结构作为参数。
我的代码中有类似这样的函数,它对5个结构执行完全相同的操作并返回相同的结构,但是我不知道是否可以这样做。我想知道我是否可以做这样的事情:
type Car struct {
Model string `yaml:"Model"`
Color string `yaml:"Color"`
Wheels int `yaml:Wheels"`
Windows int `yaml:"Windows"`
}
type Motorcycle struct {
Model string `yaml:"Model"`
Color string `yaml:"Color"`
Wheels int `yaml:Wheels"`
}
type Bus struct {
Model string `yaml:"Model"`
Color string `yaml:"Color"`
Wheels int `yaml:Wheels"`
Passengers int `yaml:"Passengers"`
}
func main () {
car := GetYamlData(Car)
motorcycle := GetYamlData(Motorcycle)
Bus := GetYamlData(Bus)
}
func GetYamlData(struct anyStructure) (ReturnAnyStruct struct){
yaml.Unmarshal(yamlFile, &anyStructure)
return anyStructure
}
是否可以做类似上面的代码?其实我拥有的是这样的:
func main(){
car, _, _ := GetYamlData("car")
_,motorcycle,_ := GetYamlData("motorcycle")
_,_,bus := GetYamlData("bus")
}
func GetYamlData(structureType string) (car *Car, motorcycle *Motorcycle, bus *Bus){
switch structureType{
case "car":
yaml.Unmarshal(Filepath, car)
case "motorcycle":
yaml.Unmarshal(Filepath, motorcycle)
case "bus":
yaml.Unmarshal(Filepath, bus)
}
return car, motorcycle, bus
}
随着时间的增加,它将返回很多值,而我不希望有很多返回值,有没有办法用我发布的第一个代码来做到这一点?
答案 0 :(得分:2)
您可以采用与yaml.Unmarshal
完全相同的方式进行操作,方法是将一个值解编为:
func GetYamlData(i interface{}) {
yaml.Unmarshal(Filepath, i)
}
用法示例:
func main () {
var car Car
var motorcycle Motorcycle
var bus Bus
GetYamlData(&car)
GetYamlData(&motorcycle)
GetYamlData(&bus)
}