我正在编写一个射线表面碰撞函数,该函数需要返回小的结构(Collision
包含一些有关碰撞的信息)。当前,由于不需要调整或共享collision
的内容,因此我将按值返回结构。但是,有时光线实际上不会碰撞,所以我的函数签名当前看起来像:
func (scene *Scene) GetFirstCollision(ray *Ray) (Collision, bool)
在没有碰撞时布尔值为false的情况。但是,我不知道在没有冲突的情况下Collision
应该取什么值。如果它是一个指针,我将只返回nil
,但不是,所以我应该返回Collision{}
吗?如果总体上比较惯用的方式只是返回一个*Collision
并在不存在的情况下返回nil
,那么我也对此持开放态度,我想不出什么时候需要指向碰撞的指针。
答案 0 :(得分:2)
以我的拙见...
除非返回指针对您的用例很重要,否则请继续使用(Collision, bool)
的返回类型,并在没有冲突的情况下只需执行return Collision{}, false
。
如果返回碰撞作为指针对您的用例很重要,只需返回一个*Collision
,其中nil
的返回类型表示“无碰撞” ,正如您所描述的。
据我所知,光线跟踪必须具有出色的性能,因此您可能有真正的理由偏爱第一种选择。