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

时间:2019-12-03 20:53:57

标签: go idiomatic

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

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

在没有碰撞时布尔值为false的情况。但是,我不知道在没有冲突的情况下Collision应该取什么值。如果它是一个指针,我将只返回nil,但不是,所以我应该返回Collision{}吗?如果总体上比较惯用的方式只是返回一个*Collision并在不存在的情况下返回nil,那么我也对此持开放态度,我想不出什么时候需要指向碰撞的指针。

1 个答案:

答案 0 :(得分:2)

以我的拙见...

  • 除非返回指针对您的用例很重要,否则请继续使用(Collision, bool)的返回类型,并在没有冲突的情况下只需执行return Collision{}, false

  • 如果返回碰撞作为指针对您的用例很重要,只需返回一个*Collision,其中nil的返回类型表示“无碰撞” ,正如您所描述的。

据我所知,光线跟踪必须具有出色的性能,因此您可能有真正的理由偏爱第一种选择。

相关问题