要求 golang 结构体初始化的时候必须赋值所有字段

2023-09-02 18:04:55 +08:00
 maotao456

因为在实际开发过程中看到过太多次因为少给结构体某个字段赋值产生数据 bug 的问题了,有没有什么 vscode 的插件可以提示结构体的所有导出字段并未被全部初始化啊?

1799 次点击
所在节点    程序员
12 条回复
makdon
2023-09-02 18:08:54 +08:00
对外不暴露结构体,只暴露接口,强制通过 New 方法初始化,可以达到这种效果
type foo struct {
a typeX
b typeX
}
type Foo Interface {
Methods()
}
func NewFoo( ...opts) Foo {
return foo{...}
}
iyear
2023-09-02 19:09:07 +08:00
iyear
2023-09-02 19:09:55 +08:00
@iyear #2 不好意思,瞄点有问题,是 https://golangci-lint.run/usage/linters/#exhaustruct
Nazz
2023-09-02 19:13:25 +08:00
没必要
zhanglintc
2023-09-02 19:20:35 +08:00
@iyear #3 我猜你说的是锚 mao2 点
iyear
2023-09-02 19:29:50 +08:00
@zhanglintc #5 语文没学好😂😂
cmdOptionKana
2023-09-02 20:02:51 +08:00
单元测试?
WUWENZE
2023-09-02 20:10:06 +08:00
yplam
2023-09-02 21:35:16 +08:00
如果默认值不是空值,并且字段又较多,那可能定义多一个 DefaultXXX 这样合理点,或者用 NewXXX 传必填项,可选参数 WithXXX 定义非必填。ide 提示效果有限,除非这个结构体永远不会增加字段,lint 效果好点
aprikyblue
2023-09-02 21:43:13 +08:00
我觉得提供 New 方法就够了,谁不用 New 方法创建对象的就是谁的问题。
kkkbbb
2023-09-03 12:16:58 +08:00
比如出现什么 bug ?不是自动会有默认值么?
maotao456
2023-09-06 09:49:28 +08:00
@iyear 多谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/970379

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX