许多 Go 代码使用以下模式:
var foo Foo
err := db.LoadFooByID(id, &foo)
// use the loaded foo
Run Code Online (Sandbox Code Playgroud)
这种模式有其优点,特别是当涉及到您事先不知道的类型时 ( interface{})。但是,如果您已经知道该类型,无论是任何其他语言,您都可以LoadFooByID像这样使用:
foo, err := db.LoadFooByID(id)
// use the loaded foo
Run Code Online (Sandbox Code Playgroud)
然而,人们仍然更喜欢前一种模式。
我知道这个问题非常主观,但如果您必须提供一种通用案例解决方案,并在代码库(对于已知类型)中一致应用,您会选择哪一个?
在第一种采用指针的形式中,您可以重用现有Foo变量,从而防止生成“垃圾”。对于单个 s 来说并不重要Foo,但是如果您Foo在循环中加载 s ,则可能会有所不同:您可以Foo在所有迭代中使用单个变量。
如果您有第一种形式,您始终可以创建一个提供第二种形式功能的辅助函数:
func loadFooById(id int) (*Foo, error) {
var foo Foo
err := db.LoadFooByID(id, &foo)
return &foo, err
}
Run Code Online (Sandbox Code Playgroud)
如果您有第二种形式,则无法将其“转换”为第一种形式:如果该LoadFooByID()函数是分配新的函数Foo,则无法使其重用现有的形式。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |