尝试取消引用一个接口,该接口是指向后端结构对象的指针,以便我可以按值传递给函数

Trying to dereference an interface that is a pointer to a struct object on the back end so I can pass by value to a function

提问人:Benji Vesterby 提问时间:8/23/2017 最后编辑:Benji Vesterby 更新时间:8/25/2017 访问量:904

问:

我有一个接口,它表示初始化后指向结构对象的指针。我想访问接口引用的对象的 Value,而不是指针,以便我可以按值将其作为接口类型传递给函数。

这是我的问题的一个例子:https://play.golang.org/p/_3vKThlj-V

我希望能够将 val by value 传递给 main 函数中的函数 EvalTest,以便我可以覆盖指向另一个线程中 TestStruct 对象的指针,而不会在另一个线程中引起指针取消引用问题。

问题是我正在对我的接口对象运行几千个 go 例程,但是由于我集成的系统的限制,每 50 次 go 例程调用我都必须重新初始化我的指针。这似乎导致了不一致的状态,即当 go 例程尝试再次访问新结构体初始化时,它尚未完全完成。因此,我想按值传递它的原因是,这样我就不必担心指针被换掉了。

对此有什么想法吗?

函数 go 接口 按引用 值传递

评论

1赞 Kenny Grant 8/23/2017
也许提供不起作用的示例,以便我们了解您想做什么以及为什么。可能有一种更简单的方法。Go 没有线程,但有 goroutines(在您的示例中没有),您不必覆盖指针。您看到的问题是什么?告诉我们问题所在,而不是您提出的解决方案。
0赞 Kenny Grant 8/23/2017
这更好,但最重要的是,这是一个展示问题的例子。当你说按值传递时,你大概是想复制实例?如果是这样,为什么不为每个请求/goroutine创建一个新实例呢?
0赞 Volker 8/23/2017
您在 playground 上的示例没有显示任何需要摆脱指针类型的内容。你能举一个真实的例子吗?
0赞 Benji Vesterby 8/25/2017
我在此线程的最新帖子中包含了一个类似于我为我的解决方案所做的示例。

答:

0赞 Benji Vesterby 8/25/2017 #1

这是通过利用通道进行集成 API 连接并在成功初始化时向下传递一个新指针来解决的。我还能够使用其他一些优化来确保仅在连接成功时替换指针。这是我在 Go slack 频道中从 Paul K 那里获得的示例。

https://play.golang.org/p/AmbsfQOzol