Go语言const声明用=合法但使用:=不合法的原因是什么
Go 常量声明中
=和:=的语法差异原因 核心问题出在:=本身的语义和const关键字完全互斥,根本没法搭配使用。
首先你要先搞懂两个符号/关键字的基础定位:
:=是Go独有的短变量声明操作符,它的作用只有一个:在函数内部声明可变的局部变量,同时完成初始化。这个操作符本身自带「声明新变量」的语义,而且它声明出来的一定是变量,不可能是常量。const是专门用来声明常量的关键字,只要开头写了const,编译器就已经知道后面跟的标识符都是常量,只需要用=绑定对应的初始化值就行,不需要额外的声明标记。
合法写法的逻辑
const name, age = "Kim", 22
这是完全符合Go语法规范的常量声明方式:
开头的const已经完成了「声明name、age为常量」的动作,后面直接跟=给初始值即可,编译器会自动根据右侧的字面量推导出常量的类型,和单常量声明const pi = 3.14、常量块声明的逻辑完全一致,没有任何冲突。
非法写法的问题
const name, age := "Kim", 22
这个写法从根上就不符合Go的语法设计,有两个硬伤:
- 语义矛盾:你前面用
const告诉编译器「我要声明不可变的常量」,后面又用:=告诉编译器「我要声明可变的局部变量」,编译器根本没法判断你的真实意图,直接报错。 - 语法规则不兼容:Go规范里明确写了,
:=只能单独用来声明变量,绝对不能和const、var这类声明关键字搭配。哪怕是声明变量的时候,你写var name, age := "Kim", 22也是错的,var声明同样只能用=,逻辑和const场景完全一样。
最后补个容易记的小规律:只要你写了const或者var关键字,后面赋值统一用=;:=只能单独用在函数内部声明局部变量的场景,和常量、包级声明完全不沾边,记住这点就不会写错。
内容的提问来源于stack exchange,提问作者Nzechi Nwaokoro
相关产品推荐
相关产品推荐

