返回Go中无效结构的惯用方式

问题描述 投票:0回答:1

我正在编写一个射线表面碰撞函数,该函数需要返回小的结构(Collision包含一些有关碰撞的信息)。当前,由于不需要调整或共享collision的内容,因此我将按值返回struct。但是,有时光线实际上不会碰撞,因此我的函数签名当前看起来像:

func (scene *Scene) GetFirstCollision(ray *Ray) (Collision, bool)

没有冲突时,布尔值为假。但是,我不知道没有冲突时Collision应该取什么值。如果它是一个指针,我只会返回nil,但不是,所以我应该返回Collision{}吗?如果总体上更惯用的方式只是返回*Collision并在不存在时返回nil,那么我也很乐意,我想不出何时需要指向该指针的情况。碰撞。

go idiomatic
1个回答
0
投票

以我的拙见...

  • 如果按用例返回重要值is返回冲突,请继续使用(Collision, bool)的返回类型,并在没有冲突时简单地执行return Collision{}, false

  • 如果通过用值返回冲突[[不是对您的用例很重要,只需返回*Collision,其中nil返回类型表示“无冲突”,如您所描述。

    ] >
  • 据我所知,希望射线跟踪性能相当好,因此您可能有充分的理由偏爱第一种选择。
© www.soinside.com 2019 - 2024. All rights reserved.