go语言学习笔记 — 基础 — 复合数据类型 — 结构体(9.1):结构体可见性规则,结构体和结构体成员字段的跨包导出

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 基础 — 复合数据类型 — 结构体(9.1):结构体可见性规则,结构体和结构体成员字段的跨包导出相关的知识,希望对你有一定的参考价值。

结构体和结构体成员字段的跨包导出

  • 如果结构体名称首字母小写,则结构体不会被导出。这时,即使结构体成员字段名首字母大写,也不会被导出。如果结构体名称首字母大写,则结构体可被导出,但只会导出大写首字母的成员字段,那些小写首字母的成员字段不会被导出。
  • 结构体的成员字段是否可被导出,也遵循大小写原则:首字母大写的成员字段可被导出,首字母小写的成员字段不可被导出。

注:但并非绝对如此,如果存在嵌套结构体,即使嵌套在内层的结构体名称首字母小写,外部也能访问到其中首字母大写的成员字段。

  • 例子
type animal struct{
    name string
    Speak string
}

type Horse struct {
    animal
    sound string
}

Horse中嵌套的animal是小写字母开头的,Horse可被导出,所以能在其它包中使用结构体Horse,其他包也能访问到结构体animal中的Speak成员字段。

很多时候,结构体Horse是不安全的,因为它可以导出给其他包,也就是把Horse给暴露出去,外界可以直接打开Horse这个"黑匣子"。

以上是关于go语言学习笔记 — 基础 — 复合数据类型 — 结构体(9.1):结构体可见性规则,结构体和结构体成员字段的跨包导出的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 基础 — 复合数据类型 — 结构体:使用匿名结构体分离json数据

go语言学习笔记 — 基础 — 复合数据类型 — 结构体:如何在包中引用另外一个包的结构体?

go语言学习笔记 — 基础 — 复合数据类型 — 结构体:类型内嵌与结构体内嵌(扩展和复用)

go语言学习笔记 — 基础 — 复合数据类型 — 结构体:构造函数 — 封装结构体和类型的一系列初始化操作(封装数据)

go语言学习笔记 — 基础 — 复合数据类型 — 结构体(10.2):自定义设置隐藏的成员属性,并获取它的值

go语言学习笔记 — 基础 — 复合数据类型 — 结构体(10.1):隐藏结构体与跨包引用结构体