dq13733519262 2019-04-17 22:55 采纳率: 0%
浏览 43
已采纳

接受interface {}参数的函数如何更新通过引用调用的值?

I have a package called server that contains a Settings struct. It contains code like this:

type Settings struct {
    foobar String
}

func example() {
    readSettings := Settings{}
    err := storage.GetSettings(&readSettings)
    // Problem: at this point, readSettings has not been changed!
}

My problem is that readSettings is not being updated.

In the storage package, there is a function GetSettings:

func GetSettings(settingsToPopulate interface{}) error {
    file, _ := os.Open("/tmp/settings.json")
    var decodedSettings interface{}
    json.NewDecoder(file).Decode(&decodedSettings)
    settingsToPopulate = decodedSettings
    return nil
}

My constraints are that the Settings struct must remain in server, and the IO method GetSettings much remain in storage.

I can't make GetSettings just accept a Settings struct, because that would cause a circular dependency.

How can I make the reference parameter of GetSettings be updated?

  • 写回答

1条回答 默认 最新

  • douyangquan2474 2019-04-18 01:11
    关注

    Here you don't need to use the intermediate variable decodedSettings. Instead, using the readSettings pointer you pass in directly will cause the JSON package to deserialise to that instead.

    Your code will become:

    func GetSettings(settingsToPopulate interface{}) error {
        file, _ := os.Open("/tmp/settings.json")
        return json.NewDecoder(file).Decode(settingsToPopulate)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)