文章内容来自func25的 twitter
在Go中设计函数时,我们可能会遇到需要传递大量参数的情况。
这可能会影响函数的目的,并使维护代码成为一件苦差事,特别是当涉及相同类型的参数时。 为了保持整洁,请考虑两种策略:
- 选项结构。
- 可变选项。
选项结构体
将参数捆绑到一个结构中,这不仅增强了可读性,还简化了参数传递。
什么时候使用它?
- 你的函数有一个很长的参数列表。
- 您的目标是自记录代码,因为结构字段本质上描述了它们的用途(通过名称)。
- 您希望轻松设置默认值或灵活修改选项。
使用此模式时, context.Context 应保留为单独的参数,而不应包含在选项结构中。
这是由于上下文在控制请求范围值、截止日期和取消信号方面的独特作用。 但在使用时有一些小技巧:
- 该结构应该向后兼容,以便在添加新字段时,我们不会破坏之前的任何内容。
- 我们始终可以在处理结构之前对其进行验证。
- 考虑隐藏您的选项结构(使其不导出),然后公开 NewXXX() 函数并在那里设置默认值。
可变参数选项
此方法利用 Go 的函数功能,允许您以更简洁的方式传递灵活数量的选项。
它在以下情况下是理想的:
-
该功能需要高度可配置。
-
大多数选项是可选的或很少使用。
-
您更喜欢简洁的调用站点。
设置默认值比使用可选结构更容易,您不需要隐藏它,只需将默认值直接放在 ConnectToDatabase 中即可。