Go (golang) 实际上允许在变量名中使用 unicode 字符吗?

Ben*_*n R 7 unicode go

或者这是一个神话?在任何官方文档中都看不到它(它就在那里,天哪!) - 当将 Atom 与 go-plus 包一起使用时,它似乎对我不起作用。很遗憾,因为我正在做很多数学运算,而且我喜欢数学符号。

更新:我不认为任何数学符号是深奥的:??? 与任何表情符号相比:

一个是或否的答案并参考官方来源就足以打勾!

更新:感谢 elithrar 的回答,我找到了“拉丁字母横向点击”?成为我想要的“双垂直线”的看似完美的类比。

eli*_*rar 6

Go 支持某些Unicode 类别,如https://golang.org/ref/spec#Identifiers

标识符命名程序实体,例如变量和类型。标识符是一个或多个字母和数字的序列。标识符中的第一个字符必须是字母。

identifier = letter { letter | unicode_digit } .
Run Code Online (Sandbox Code Playgroud)

上述类在规范中定义为:

unicode_letter = /* a Unicode code point classified as "Letter" */ .
unicode_digit  = /* a Unicode code point classified as "Decimal Digit" */ .
Run Code Online (Sandbox Code Playgroud)

在 Unicode 标准 6.3 中,第 4.5 节“通用类别”定义了一组字符类别。Go 将LuLlLtLmLo类别中的字符视为 Unicode 字母,将Nd类别中的字符视为 Unicode 数字。

“简短”的答案是支持某些运算符,具体取决于它们的字符类。更深奥的/专业的不会。


J.M*_*SON 6

是的。我已经用日语和英语混合编程了几个月。我项目中的所有类型都是两个字符长。

例子:

type T? struct{}; //model      (literally: mold/model)
type T? struct{}; //view       (literally: show      )
type T? struct{}; //controller (literally: master    )
Run Code Online (Sandbox Code Playgroud)

“干净代码”的对立面。这个想法是你的大脑更擅长解析简短的变量名。

此外,在创建新的问题域时,变量名称会失控。想象一下,我们正在编写一个新事物。它是磨碎的燕麦与水(一种甜的结晶物质)混合,然后在热箱中热处理 35 分钟。

变量名称:HeatTreatatedMilledOatsWithWaterAndSweetCrystal

是的,我们可以称之为蛋糕。但是还没有人发明蛋糕。

或者我们可以:

//Literally: ?=="Meal". 
//In Code  : ?=="Heat Treated Milled Oats,Water,And Sweet Crystal"
type T? struct{};
Run Code Online (Sandbox Code Playgroud)

  • 哇,撒旦! (8认同)