登录
首页 >  Golang >  Go问答

如何将任何结构作为参数发送给方法并返回该结构?

来源:stackoverflow

时间:2024-04-19 16:12:32 166浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《如何将任何结构作为参数发送给方法并返回该结构?》,涉及到,有需要的可以收藏一下

问题内容

我是 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

}

随着时间的推移,这会增加,它将返回很多值,而我不想要很多返回值,有没有办法用我发布的第一个代码来做到这一点?


解决方案


您可以采用与 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)
}

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>