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

Go语言标识符

文章目录

  • 标识符的组成规则
  • Go语言关键字
  • 预定义标识符
    • 标识符命名惯例
  • 特殊标识符
  • 标识符访问权限控制

在Go语言中,标识符(Identifier)是用来命名变量、函数、类型、常量等程序实体的名称。

标识符的组成规则

1、必须以字母或下划线(_)开头:

    字母包括Unicode字符集中的任何字母字符。可以使用中文等非ASCII字符作为标识符(但不推荐)。

2、后续字符可以是字母、数字或下划线

例如:name, age, _count, x1都是合法的标识符。

3、区分大小写

Name和name是不同的标识符。

4、不能是Go语言的关键字

Go有25个保留关键字,不能用作标识符。

Go语言关键字

以下是Go语言的保留关键字,不能用作标识符:

break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var

预定义标识符

Go还有一些预定义的标识符,虽然它们不是关键字,但最好避免使用它们作为自己的标识符:

true false iota nilint int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string errormake len cap new append copy close delete
complex real imag
panic recover

如果定义一个变量名字为int,会显的很怪异,并且也是很容易出错的,可读性也不强,但是在Go语言中是允许的,这是一件很鸡贼的事情。其实我很不理解,Go语言有如此之多的强制性要求,为什么不把这个点修改了?是没必要还是修改起来困难呢?
在这里插入图片描述

标识符命名惯例

1、驼峰命名法(CamelCase)

公开的标识符(首字母大写):GetName, ServerAddr非公开的标识符(首字母小写):getName, serverAddr

2、简短而有意义

Go倾向于使用短小但有描述性的名称例如用i而不是index作为循环变量

3、避免使用下划线

除非是特殊用途(如测试文件_test.go)

4、包名应简短

通常使用小写单数名词,如http, time, json

特殊标识符

空白标识符(_): 用于忽略值

go
_, err := someFunction() // 忽略第一个返回值
在这里插入图片描述

标识符访问权限控制

大小写决定标识符的可见性(导出规则):

1、首字母大写:表示该标识符是可导出的(exported/public),可以被其他包访问

go

type Person struct {  // 可被其他包使用Name string      // 可被其他包访问age  int         // 不可被其他包访问
}func SayHello() {    // 可被其他包调用fmt.Println("Hello")
}

首字母小写:表示该标识符是包私有的(unexported/private),只能在当前包内使用

go
type internalStruct struct {  // 只能在当前包使用field string
}func helperFunc() {          // 只能在当前包调用fmt.Println("helper")
}

相关文章:

  • 支持向量机与逻辑回归的区别及 SVM 在图像分类中的应用
  • 【时时三省】(C语言基础)字符数组
  • Transformer Decoder-Only 参数量计算
  • ESP32-S3 学习笔记(1)
  • RabbitMQ概念详解
  • RagFlow 完全指南(一):从零搭建开源大模型应用平台(Ollama、VLLM本地模型接入实战)
  • 零基础玩转sqlmap - 从入门到摸清数据库
  • 力扣70题解
  • Vue3入门(1)简单的用户列表页
  • 效率办公新工具:PDF Reader Pro V5.0功能解析与使用体验
  • mysql主从复制是什么
  • 【质量管理】什么是过程?
  • 【数据库知识】Mysql进阶-高可用MHA(Master High Availability)方案
  • 如何使用 Netstat 查看监听端口
  • 大数据基础——Ubuntu 安装
  • 金融行业NLP优化:英特尔至强AI加速实战案例
  • 【python】基础知识点100问
  • opencv关键点检测
  • Ubuntu 24服务器部署abp vnext应用程序的完整教程
  • 谷歌与微软的AI战争:搜索、云服务与生态布局
  • 王毅集体会见加勒比建交国外长及代表
  • 盖茨说对中国技术封锁起到反作用
  • 通辽警方侦破一起积压21年的命案:嫌疑人企图强奸遭反抗后杀人
  • 演员发文抵制代拍获粉丝支持,媒体:追星“正确姿势”不妨多来点
  • 巴称巴控克什米尔地区11人在印方夜间炮击中身亡
  • 巴基斯坦对印度发起网络攻击,致其约70%电网瘫痪