Go语言规范-词法元素

词法元素

注释

注释的作用是程序的文档,有两种形式:

  1. 行注释:从双斜杠(//)开始直到行尾
  2. 块注释:从斜杠和星号(/*)开始直到遇到第一个星号和斜杠(*/)
    在符号和字符串字面的内部不能使用注释,注释的内部也不能再注释。
    块注释中如果没有新行视为一个空格。其他的注释都视为新行。

占位符

占位符组成了GO语言的词汇表。有四种类型:标识符,关键字,操作符与标点,字面。
空格、纵向制表符 (U+0020)、横向制表符 (U+0009)、回车(U+000D)和换行(U+000A),都会被忽略,除非它们被用于分割两个可能会合并成另一个占位符的占位符。遇到换行或是文件结尾时会插入分号。

分号

形式语法要求在生成式之间以分号(;)作为分割。GO程序可以在大部分情况下通过以下两条规则来省略分号:

  1. 输入被分为多个占位符时,当一行的最后一个占位符满足以下条件之一时,会在该占位符后面插入分号:
    • 是一个标识符
    • 是一个整型、浮点型、虚数、符号或字符串字面
    • 是以下关键字之一: break、continue、fallthrough、return
    • 是以下操作符或标点之一:++、–、)、]、}
  2. 为了允许在一行中可以出现复杂语句,在闭合的右圆括号())或右花括号(})之前的分号可以省略

标识符

标识符用来给程序的实体(如:变量和类型)命名,标识符是一系列的字母(参考Unicode8.0第4.5章节latter的字义)加上数字,不能以数字开头。合格的标识符如下

a
_x9
ThisVariableIsExported
αβ

有一些预定义标识符:

  • 空标识符:用下符线(_)表示。它作为一个匿名占位符而不是一个常规的标识符,在声明、操作数、赋值语句中有特殊的意义
  • 预定义标识符
    类型:
    	bool byte complex64 complex128 error float32 float64
    	int int8 int16 int32 int64 rune string
    	uint uint8 uint16 uint32 uint64 uintptr
    常量:
    	true false iota
    零值:
    	nil
     函数:
        append cap close complex copy delete imag len
        make new panic print println real recover
    

关键字

关键字是保留的,不能用作标识符

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

操作符与标点

+    &     +=    &=     &&    ==    !=    (    )
-    |     -=    |=     ||    <     <=    [    ]
*    ^     *=    ^=     <-    >     >=    {    }
/    <<    /=    <<=    ++    =     :=    ,    ;
%    >>    %=    >>=    --    !     ...   .    :
     &^          &^=

整型字面

一系列的数字表示的整型常量。对于非十进位的字面需要使用以下前缀:0代表八进制,0x或0X代表十六进制。在十六进制字面中a-f和A-F表示10到15。以下是合格的示例:

42
0600
0xB

浮点型字面

浮点字面包含一个整数部分、一个小数点、一个小数部分和一个指数部分。表示浮点型数量。
整数和小数部分都是数字组成,指数部分使用一个e或是E后面跟着有符号的数字部分。整数部分或是小数部分之一可以省略;小数点或指数部分之一可以省略

0.
72.40
072.40  // == 72.40
2.71828
1.e+0
6.67428e-11
1E6
.25
.12345E+5

虚数字面

表示复数常量。包含浮点字面或是整型字面,并跟着一个小写字母i

Rune字面

Rune字面表示一个Rune常量,它是一个标识Unicode码点的整数值。
一个rune字面由被单引号包含的一个或多个字符来表达,在其中除了换行和未转义的单引号,任何字符都可以出现。被包含的单个字符代表的就是它自己的Unicode值,而以反斜杠开头的多个字符的序列则以多种格式编码值。

  1. 最简单的形式就是在单引号中表示单个字符。
    由于GO源码文本是以UTF8编码的Unicode字符,多个UTF8编码字节可能表示单个整型值。例如,字面’a’占用1字节表示字母a、Unicode U+0061、值0x61,而’ä’ 占用2字节(0xc3 0xa4)表示字母a上加两点、U+00E4、值0xe4。

  2. 一些反斜杠转义允许把任意值编码成ASCII文本。有四种方法把整型值表达成一个数值常量:

    • \x后跟两位(只能是两位)十六进制数字
    • \u后跟四位(只能是四位)十六进制数字
    • \U后跟八位(只能是八位)十六进制数字
    • \后直接跟三位(只能是三位)八进制数字

    以上每种情况的字面的值就是以相应基数表示的数值。
    虽然几种表达方式都可以表示整型,但有不同的取值范围。八进制转义可以表示 [0,255],十六进制转义根据构造满足此条件。\u和\U表示的是Unicode码点,所以有些值是非法的,特别是0x10FFFF以上的那些值以及半代理(surrogate halves)。

字符串字面

猜你喜欢

转载自blog.csdn.net/finalday/article/details/84869876