为了账号安全,请及时绑定邮箱和手机立即绑定

在结构上重用方法

在结构上重用方法

Go
蓝山帝景 2022-07-04 16:58:24
我有一个方法,它将一个 URL 带到一个 yaml 文件并将其解组为一个结构。它没有什么独特之处,所以我想在另一个结构上使用它。type SWConfig struct {    Name      string `yaml:"name"`    Version   string `yaml:"version"`    BuildType string `yaml:"buildType"`}func (c *SWConfig) getConfiguration(url string) {    resp, err := http.Get(url)    if err != nil {        log.Fatalf("ERROR: GET request failed: %s\n", err.Error())    }    if resp.StatusCode != http.StatusOK {        log.Fatalf("ERROR: %v:  %s\n", resp.Status, url)    }    source, err := ioutil.ReadAll(resp.Body)    if err != nil {        log.Fatalf("ERROR: could not read response: %s\n", err.Error())    }    err = yaml.Unmarshal(source, c)    if err != nil {        log.Fatalf("ERROR: could not read YAML: %s\n", err.Error())    }}var swConfig SWConfigswConfig.getConfiguration(swURL)fmt.Println(swConfig.Name)另一个结构将具有不同的字段,但对于此方法而言,这同样无关紧要。是否可以重用此方法还是需要将其转换为函数?
查看完整描述

1 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

使用此实用功能。它适用于指向任何类型的指针。


// fetchYAML unmarshals the YAML document at url to the value 

// pointed to by v.

func fetchYAML(url string, v interface{}) error {

    resp, err := http.Get(url)

    if err != nil {

        return err

    }

    if resp.StatusCode != http.StatusOK {

        return fmt.Errorf("bad status: %v:  %s\n", resp.Status, url)

    }

    source, err := ioutil.ReadAll(resp.Body)

    if err != nil {

        return err

    }

    err = yaml.Unmarshal(source, v)

    return err

}

像这样称呼它:


func (c *SWConfig) getConfiguration(url string) {

    if err := fetchYAML(url, c); err != nil {

        log.Fatalf("ERROR: get value failed: %s\n", err.Error())

    }

}


查看完整回答
反对 回复 2022-07-04
  • 1 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号