在函数内部和外部定义结构的含义?
是否有任何影响(GC流失,性能或其他)来定义一个struct
内部的struct
与外部定义? 例如:
type Outside struct {
Foo string `json:"foo"`
}
func SomeFunc(b []byte) error {
outside := Outside{}
if err := json.NewDecoder(b).Decode(&outside); err != nil {
return err
}
...
}
与
func SomeFunc(b []byte) error {
type inside struct {
Foo string `json:"foo"`
}
if err := json.NewDecoder(b).Decode(&inside); err != nil {
return err
}
...
}
会不会有一种比另一种更受欢迎的情况?
没有性能差异 - 这只是范围的差异(即可以看到类型定义的地方)。 如果你只需要一个函数内的类型,那么在那里定义它就可以了。
正如其他人所指出的那样,如果您在名称以大写字母开头的包级别(即在函数之外)定义一个类型,它将被导出(即在包之外可见)。 如果名称不是以大写字母开头,则只会在包内显示。
我的理解是差异仅在于可访问性。 定义以大写字母开头的结构将是可导出的,这意味着可以从其他包中访问它。 定义以小写字母开头的结构体可以从同一包中的任何内容访问,但不能从外部访问。 在函数中定义的结构只能由该函数访问/初始化。
当在函数体内声明任何内容而不是在外部声明时,有一个显而易见的关注范围。
但是在你的第一个例子中,你是在外部符号表示的函数体外声明一个类型。
在你的第二个例子中,你声明了一个由符号表示的变量。 这有你描述的结构的文字类型。
请注意,在第一个示例中,您可以使用符号Outside来引用任何类型为Outside的变量。
在第二个例子中,没有符号可以引用里面调用的变量的类型。 这是因为这个变量的类型是用一个匿名结构来表示的。
链接地址: http://www.djcxy.com/p/38361.html上一篇: Implications of defining a struct inside a function vs outside?