GO语言基础教程(9)关键字和标识符之标识符命名规则:代码界的“化妆舞会”:GO语言标识符命名规则全揭秘,让你的变量名不再社死!

一、命名这小事,凭什么让我头秃?

兄弟们,敲代码最痛苦的瞬间是什么?不是debug到凌晨三点,而是当你看到自己半年前写的变量名——a1tmp2data_final_final2时,恨不得把键盘生吞了!这就好比给你家猫起名叫“那个喵”,喊一声全小区的猫都回头。

在Go语言世界里,标识符就是我们给变量、函数、类型起的“江湖名号”。它看似简单,实则藏着能让代码从“优雅如诗”变成“天书密码”的魔法。今天咱们就掰开揉碎,看看这命名规则到底有多少幺蛾子!

二、标识符的“宪法三条”——不遵守会出人命!

第一条:开局要正统
标识符必须以字母(大小写都行)或下划线_开头,数字?想都别想!这就好比不能给新生儿取名“007”,虽然很酷但派出所不给上户口。

✅ 合法公民:name, _count, HelloWorld
❌ 非法分子:1stPlace, %percent, @username

第二条:身体要纯洁
后面只能接字母、数字、下划线,什么@、#、$通通是违禁品。想象一下,要是变量名里带表情包,编译器估计直接崩溃给你看。

✅ 良民代表:userAge, max_value2, _tempData
❌ 搞事分子:user-age, price$, email@address

第三条:别跟大佬撞名
Go语言的25个关键字(比如func, package, import)是你的命名雷区,就像不能给孩子取名“公安局”一样离谱。

// 作死小能手示范
func func() { }  // 编译器:你当我傻?
var package = 1 // 这行代码活不过三秒

三、大小写定生死——Go语言の潜规则

这是Go最骚的规则:首字母大写=公开营业,小写=私家重地!相当于在变量脑门上贴了张“欢迎来用”或“闲人免进”的标签。

package main

var publicVar = "我是广场舞大妈谁都能撩" // 首字母小写,包内私有
var PublicVar = "我是KTV麦霸全场随便点" // 首字母大写,对外公开

func privateFunc() { } // 只有本包能调用
func PublicFunc() { }  // 其他包随意召唤

实测现场:

// 在mypackage包中
package mypackage

var secret = "我暗恋隔壁小王"      // 私有变量
var Secret = "我宣布爱上吴彦祖"    // 公共变量

// 在main包中试图调戏
package main
import "mypackage"

func main() {
    println(mypackage.Secret) // 正常输出
    println(mypackage.secret) // 报错!偷看隐私犯法!
}

四、实战命名指南——从菜鸡到逼王

1. 变量命名:拒绝谜语人行为

// 灾难级命名
var d int    // 毛线意思?直径?天数?屌丝?
var t1, t2 string // 双胞胎还不写注释?

// 神仙级命名
var deadlineDays int    // 截止天数,一目了然
var userName, userEmail string // 成对变量关系清晰

2. 函数命名:要像自动说明书

// 反人类设计
func process(a, b int) int // 请问这是做核酸还是炒菜?

// 保姆级服务
func CalculateOrderTotal(price, quantity int) int // 看名知意

3. 包级命名:别整中二病

// 非主流时期
import "lib_2023_cool"   // 明年就羞耻
import "super-utils"     // 中二病发作

// 成熟期选择
import "fileutil"        // 简洁专业
import "strconv"         // 标准范本

五、那些年我们踩过的命名坑

坑1:大小写惨案

// 文件:calculator.go
package calculator

var theAnswer = 42   // 私有变量
var TheAnswer = 42   // 公共变量

// 另一个包中
println(calculator.TheAnswer) // 正确
println(calculator.theAnswer) // 编译错误:社恐变量拒绝见面

坑2:下划线の妙用
下划线就像代码里的“路人甲”,常用来忽略返回值:

data, _ = someFunc() // 明确表示:我故意不要第二个返回值

但用在普通命名时,它就变成了“神秘面具”:

var _internalCache = make(map[string]int) // 暗示:这是内部实现,别乱动!

六、进阶操作——打破次元壁的命名

用中文命名?真的可以!

var 用户名 = "张三"        // 虽然合法但...
var 打印 = fmt.Println    // 骚断腿的操作

func 计算面积(长, 宽 int) int { // 团队会被你吓哭
    return 长 * 宽
}

温馨提示:除非团队全员中文母语且不怕被其他程序员追杀,否则慎用!

跨包调戏示范

// 在utils包定义
package utils

var GlobalConfig = "配置信息"
var hiddenConfig = "藏宝图"

// 在main包中
package main

import "utils"

func main() {
    println(utils.GlobalConfig) // 成功读取
    // println(utils.hiddenConfig) // 死心吧,这是私人财产
}

七、命名风格大乱斗——选择你的英雄

1. 驼峰派(Go官方推荐)

var userName        // 小驼峰(变量/函数)
type UserManager    // 大驼峰(类型/接口)

2. 蛇形派(虽然Go不推荐但有人偷偷用)

var user_name       // 看着像Python卧底

3. 极简派(适合短生命周期变量)

for i := range users {  // i在10行内用完,没问题
    u := users[i]       // u只在这个循环有用
}

八、终极测试——来找茬!

找出下面代码的命名问题:

package main

var 1stName = "李"
var user-age = 18
func get(){}
type struct interface{}

func main() {
    var defer = "坑爹呢"
    Println("看看你能发现几个雷?")
}

答案揭晓
1stName数字开头 ② user-age含连字符
get过于简略 ④ interface关键字作类型名
defer关键字作变量名 —— 五杀成就达成!

九、结语——好名字是程序员最好的嫁妆

记住,你写的代码最多被看两次:一次是你写的时候,一次是别人接手骂“这什么鬼”的时候。好的标识符就像给代码化了妆,差的标识符则是直接给代码做了毁容手术。

从现在开始,给你的变量起个能见人的名字吧!毕竟,在Go语言的世界里——名不正则言不顺,言不顺则编译不过啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值