英文:
When to use unnamed type?
问题
阅读答案
我们使用命名的结构类型,例如,
type Foo struct{
name string
email string
}
var y Foo
用于解码传输的数据或引入一个新类型,该类型包含一组值及对这些值进行操作的操作
1)何时使用无名类型?
var x struct{
name string
email string
}
2)初始化变量标识符x
的语法是什么?
英文:
Read the answer
We use named struct type, say,
type Foo struct{
name string
email string
}
var y Foo
to decode the data coming on wire or introduce a new type that holds set of values and operations on those values
-
When to use unnamed type?
var x struct{ name string email string }
-
What is the syntax to initialize variable identifier
x
?
答案1
得分: 2
作为一个快速的规则,如果你发现自己在复制/输入结构体定义,那么最好将其定义为一个命名类型。毕竟,命名的目的就是为了多次引用同一事物而提供的快捷方式。为了避免命名混乱,尽量在最窄的范围内声明类型(例如,在使用它的函数范围内)。
初始化的语法如下:
var x struct{
name string
email string
} = struct {
name string
email string
}{
name: "name",
email: "email",
}
可以简化为
var x = struct {
name string
email string
}{
name: "name",
email: "email",
}
因为类型可以被推断出来。
在不需要显式引用类型的情况下,使用无名类型是最合适的时机。由于类型没有名称,要显式引用它,你(通常)必须再次复制整个类型规范。例如,在分配新值时。
// 重新分配 x
x = struct {
name string
email string
}{
name: "name2",
email: "email2",
}
这会很快变得非常丑陋,特别是对于较大的结构体,而且重复的代码在需要更新时会创建重复的工作量。
你可以尝试将其简化如下:
// 重新分配 x
x.name = "name2"
x.email = "email2"
然而,这应该被视为不好的形式,因为不清楚意图是重新分配整个值"x"还是只修改一些选择的字段。如果结构体更新以添加更多字段,那么这段代码可能会在没有警告的情况下变得不正确。
英文:
As a quick rule, if you ever find yourself copying/typing out the struct definition again, you may as well make it a named type. That is the whole point of names, after all; they are a shortcut to refer to the same thing multiple times. To avoid naming clutter, try to declare the type in the narrowest scope possible (for example, within the function scope where it is used).
The syntax to initialize is as follows:
var x struct{
name string
email string
} = struct {
name string
email string
}{
name: "name",
email: "email",
}
which can be shortened to
var x = struct {
name string
email string
}{
name: "name",
email: "email",
}
since the type can be inferred.
The best time to use unnamed types is when you do not have to explicitly refer to the type again. Since the type has no name, to refer to it explicitly you (generally) have to duplicate the whole type specification again. For example, when assigning a new value.
// reassign x
x = struct {
name string
email string
}{
name: "name2",
email: "email2",
}
This will quickly get quite ugly, especially for larger structs, and duplicated code creates duplicated work when it needs to be updated.
You could attempt to shorten this as follows:
// reassign x
x.name = "name2"
x.email = "email2"
This should be considered bad form, however, as it is unclear if/that the intent was to reassign the entire value of "x" or just alter some select fields. If the struct is updated to add more fields, then this code may become incorrect without warning.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论