gpt4 book ai didi

go - 如何隐藏golang中的默认类型构造函数?

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:58 24 4
gpt4 key购买 nike

我有这个问题的原因是我经常犯错误,我忘记为结构的字段指定一个值,然后编译器没问题,但零值会导致错误。

这是一个例子。假设我在一个包中定义了一个 Foo 类型:

package types

type Foo struct {
RequiredField1 string
RequiredField2 string
}

它是公开的并且有 2 个字段,我希望在创建 Foo 结构时指定它们。

然后我可以像这样在我的主要功能中导入和使用它:

package main

import (
"github.com/foo/bar/types"
)

func main() {
f := &Foo{
RequiredField1: "fff",
}
fmt.Printf("f.RequiredField2: %v", f.RequiredField2)
}

这会导致错误,因为我忘记指定必需的 RequiredField2。我经常犯这种错误:p

现在,为了利用编译并防止这个错误,我为 Foo 创建了一个构造函数并请求所需的值。

func NewFoo(field1 string, field2 string) *Foo {
return &Foo{Field1: field1, Field2: field2}
}

这样一来,如果我忘记传递 field2,编译器将不会编译我的代码:

func main() {
f := NewFoo("foo")
fmt.Printf("f.Field2: %v", f.Field2)
}

构建将失败:

./prog.go:18:13: not enough arguments in call to NewFoo
have (string)
want (string, string)

现在的问题是:如何阻止外部调用者(来自其他命名空间的调用者)调用Foo的默认构造函数,即&Foo,并强制他们调用使用 NewFoo

如果可以的话,我是安全的,因为 NewFoo 是创建 Foo 类型的唯一方法,而且编译器帮助我确保在调用它时所有字段都存在。

最佳答案

How to hide the default type constructor in golang?

不能导出类型。

习惯就好,现实生活中不是问题。

(对于未导出的类型,只需提供一个func NewUnexportedType(...) unexportedType。)

关于go - 如何隐藏golang中的默认类型构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com