1. 程式人生 > >Go語言規範-詞法元素

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)。

字串字面