Go语言标识符

文章目录

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

标识符的组成规则

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

复制代码
    字母包括Unicode字符集中的任何字母字符。

    可以使用中文等非ASCII字符作为标识符(但不推荐)。

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

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

3、区分大小写

Name和name是不同的标识符。

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

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

Go语言关键字

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

bash 复制代码
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还有一些预定义的标识符,虽然它们不是关键字,但最好避免使用它们作为自己的标识符:

bash 复制代码
true false iota nil

int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error

make 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

c 复制代码
type Person struct {  // 可被其他包使用
    Name string      // 可被其他包访问
    age  int         // 不可被其他包访问
}

func SayHello() {    // 可被其他包调用
    fmt.Println("Hello")
}

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

c 复制代码
go
type internalStruct struct {  // 只能在当前包使用
    field string
}

func helperFunc() {          // 只能在当前包调用
    fmt.Println("helper")
}
相关推荐
覆东流5 小时前
7.Java数组
java·开发语言·后端
threerocks6 小时前
AI 原生软件开发生命周期手册 - 如何借助 AI,逐阶段改造软件开发生命周期
前端·javascript·后端
JavaPub-rodert6 小时前
王仕宇在 Go Context 如何解决协程泄漏与超时控制
开发语言·后端·golang·iphone·javapub·王仕宇
深漂的华哥6 小时前
Ruoyi-Plus前后端分离场景下,数据加密传输
java·spring boot·后端·开源·maven·ruoyi
why技术8 小时前
eli5,我觉得这个全网在吹的技能,使用体验真的很一般啊。
前端·人工智能·后端
学习星球8 小时前
Qwik 框架入门实战:从开源项目 Qwik City 开始,用可恢复性替代水合
后端·前端框架·开源·c5全栈
IT_陈寒10 小时前
被Java的final坑惨了,这些细节你可能也忽略了
前端·人工智能·后端
Zadig10 小时前
企业 Agent 总烂在 Demo 里?Zadig 工作流 AI 任务给了一条路
后端·devops
Zadig10 小时前
告别"人肉扛雷":Zadig 用 AI 接管发布前最脏最累的 15 分钟
后端·aiops
Nturmoils11 小时前
向量数据库不该成为新孤岛:KingbaseES 多模融合架构如何减少数据搬运
后端