当前位置: 首页 > news >正文

Go语言初识--标识符 可见性

Go语言初识–标识符 可见性

和C语言相似,go语言的基本组成有:

  1. 包声明,编写源文件时,必须在非注释的第一行指明这个文件属于哪个包,如package main。
  2. 引入包,其实就是告诉Go 编译器这个程序需要使用的包,如import "fmt"其实就是引入了fmt包。
  3. 函数,和c语言相同,即是一个可以实现某一个功能的函数体,每一个可执行程序中必须拥有一个main函数。
  4. 变量,Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
  5. 语句/表达式,在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
  6. 注释,和c语言中的注释方式相同,可以在任何地方使用以 // 开头的单行注释。以 /* 开头,并以 */ 结尾来进行多行注释,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。

标识符

标识符(Identifier)是程序中用来命名实体(如变量、函数、类型、常量、结构体字段等)的名字。在 Go 语言中,标识符的命名遵循以下规则:

  1. 组成部分

    • 标识符由字母、数字和下划线 _ 组成。
    • 标识符的第一个字符必须是字母(a-zA-Z)或下划线 _,不能是数字。

    例如:

    var valid1 int    // 合法
    var 1invalid int  // 不合法,不能以数字开头
    var _validName int // 合法
    
  2. 大小写

    • 大写字母开头的标识符被认为是 导出 的(即在其他包中可见)。
    • 小写字母开头的标识符是 未导出 的,只能在当前包内访问。

Go 语言中的可见性规则(导出与未导出):

1. 导出标识符(Exported Identifier)

  • 大写字母开头的标识符可以被外部包访问,也就是说,这种标识符对外部包是 可见的
  • 这与其他语言中的 public 类似,例如 Java 或 C++ 中的公共成员。

示例

// 定义一个结构体和函数,结构体字段和函数名首字母大写,表示它们是导出的
package mypackage// 导出字段
type MyStruct struct {Name string
}// 导出函数
func MyFunction() {fmt.Println("This is a public function!")
}

在这个示例中,MyStruct 结构体和其字段 Name,以及 MyFunction 函数都可以被外部包使用:

package mainimport "mypackage"func main() {var s mypackage.MyStructs.Name = "Hello"  // 可以访问 Name 字段,因为它是导出的mypackage.MyFunction()  // 可以调用 MyFunction,因为它是导出的
}
  • MyStructMyFunction导出 的,因为它们的名字以大写字母开头,其他包可以直接访问它们。

2. 未导出标识符(Unexported Identifier)

  • 小写字母开头的标识符未导出 的,只能在定义它的包内访问,外部包无法直接访问。
  • 这类似于其他语言中的 privateprotected 成员。

示例

package mypackage// 未导出字段
type MyStruct struct {name string // 小写字母开头,表示未导出
}// 未导出函数
func myFunction() {fmt.Println("This is a private function!")
}

在这个示例中,MyStructname 字段和 myFunction 函数都是 未导出 的,它们只能在 mypackage 包内部使用,其他包无法访问:

package mainimport "mypackage"func main() {var s mypackage.MyStructs.name = "Hello"  // 错误:无法访问未导出的字段 'name'mypackage.myFunction()  // 错误:无法调用未导出的函数 'myFunction'
}
  • 由于 name 字段和 myFunction 函数都是小写字母开头,表示它们是 未导出 的,外部包无法访问。

总结:

  1. 标识符组成:Go 中的标识符由字母、数字和下划线组成,但首字符必须是字母或下划线。

  2. 导出和未导出

    • 大写字母开头的标识符(如 MyStructMyFunction)是 导出的,可以被外部包访问。

    • 小写字母开头的标识符(如 namemyFunction)是 未导出的,只能在当前包内访问。

    • 导出:类似于其他语言中的 public,表示对外部可见。

    • 未导出:类似于其他语言中的 private,表示对外部不可见。

为什么这个规则很重要?

  1. 封装性:Go 使用这种规则来实现封装,只暴露给外部包必要的功能,而隐藏包内部的实现细节。
  2. API 设计:通过将某些函数和类型字段标记为 导出未导出,你可以更清晰地设计包的公共接口,并防止外部包访问不该访问的内部实现。
http://www.dtcms.com/a/293104.html

相关文章:

  • 数据库表介绍
  • ArcGIS地形起伏度计算
  • javaweb小案例1
  • Linux打开、读写一个文件内核做了啥?
  • python安装package和pycharm更改环境变量
  • MySQL:内置函数
  • 基于模拟的流程为灵巧机器人定制训练数据
  • 钢铁逆行者:Deepoc具身智能如何重塑消防机器人的“火场直觉”
  • CY3-NH2/amine 使用注意事项
  • 【nginx】隐藏服务器指纹:Nginx隐藏版本号配置修改与重启全攻略
  • Adaptive Graph Convolutional Network for Knowledge Graph Entity Alignment
  • 基于LangGraph的Open Deep Research架构全解析:从多Agent协作到企业级落地
  • 数据库设计mysql篇
  • 什么是检索增强生成(RAG)?
  • java调用周立功USBCAN SDK读取汽车总线数据
  • [3-02-02].第04节:开发应用 - RequestMapping注解的属性2
  • TCP头部
  • Kotlin伴生对象
  • Go后端配置文件教程
  • LeetCode|Day22|231. 2 的幂|Python刷题笔记
  • AI一周事件(2025年7月15日-7月21日)
  • 开发避坑短篇(4):跨域请求中Session数据丢失的排查与修复方案
  • Qt资源系统:如何有效管理图片和文件
  • 【黑马SpringCloud微服务开发与实战】(五)微服务保护
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 访问鉴权功能实现
  • MMDeploy模型转换与TensorRT推理遇到问题及解决方案
  • GRU模型
  • Trae安装指定版本的插件
  • Clickhouse源码分析-副本数据同步
  • 网络编程---TCP协议