在函数内部和外部定义结构的含义?

是否有任何影响(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?

下一篇: "Webpage has expired" in Spring Framework MVC