Go語言的標識符、關鍵字、字面量、類型

一直在 Segment Fault 上面實行本身的拿來主義,但其實我是一直很樂意分享的人,並且特別喜歡寫,之前一直都是在本身的博客裏面寫,可是沒啥人看,也造成不了交流,因此,申請在 Segment Fault 上面開個專欄,之後還忘你們多多指教,這篇文章只是想試試 Segment Fault的編輯器,內容是前幾天寫的。編程

Go語言的語言符號又稱記法元素,共包括5類,標籤符(identifier)、關鍵字(keyword)、操做符(operator)、分隔符(delimiter)、字面量(literal),它們是組成Go語言代碼和程序的最基本單位。數組

Go語言的全部源代碼都必須由 Unicode 編碼規範的 UTF-8 編碼格式進行編碼。app

1、標識符

在Go語言代碼中,每個標識符能夠表明一個變動或者一個類型(即標識符能夠被看做是變量或者類型的代號或者名稱),標識符是由若干字母、下劃線(_)和數字組成的字符序列,第一個字符必須爲字母。同時,使用一個標識符在使用前都必須先聲明。在一個代碼塊中,不容許重複聲明同一個標識。編程語言

代碼包聲明(package PKG_NAME)並不算是一個聲明,由於代碼包名稱並不出如今任何一個做用域中,代碼包聲明語句的目的只是爲了鑑別若干源碼文件是否屬於同一個代碼包,或者指定導入代碼包時的默認代碼包引用名稱。編輯器

一個限定標識符表明了對另外一個代碼包中的某個標識符的訪問,這須要兩個條件:ide

  1. 另外一個代碼包必須事情由Go語言的導入聲明 import 導入;
  2. 某個標識符在代碼包中是可導出的。

標識符可導出的前提條件有下面這兩個:函數

  1. 標識符名稱中的第一個字符必須是大寫;
  2. 標識必須是被聲明在一個代碼包中的變量或者類型的名稱,或者是屬於某個結構體類型的字段名稱或者方法名稱。

在Go語言中還存在一類特殊的標識符,叫做預約義標識符,這類標識符隨Go語言的源碼一同出現,主要包括如下幾種:ui

  1. 全部基本數據類型的名稱
  2. 接口類型 error
  3. 常量 truefalse 以及 iota
  4. 全部內奸函數的名稱,即 appendcapclosecomplexcopydeleteimaglenmakenewpanicprintprintlnrealrecover

由一個下劃線表示的標識 _ 爲空標識符,它通常被用在一須要引入一個新綁定聲明中,如:編碼

import _ "runtime/cgo"

2、關鍵字

關鍵字是指被編程語言保留頁不讓編程人員做爲標識符使用的字符序列。所以,關鍵字也稱爲保留字。指針

Go 語言中全部的關鍵只有25個:

  1. 程序聲明:importpackage
  2. 程序實體聲明和定義:chanconstfuncinterfacemapstructtypevar
  3. 程序流程控制:goselectbreakcasecontinuedefaultdeferelsefallthroughforgotoifrangereturnswitch

3、字面量

簡單來講,字面量就是表示值的一種標記法,可是在Go語言中,字面量的含義要更廣一些:

  1. 用於表示基礎數據類型值的各類字面量。
  2. 用戶構造各類自定義的複合數據類型的類型字面量,以下面這個字面量表示了一個名稱爲 Person 的自定義結構體類型:

    type Person struct {
         Name string
         Age uint8
         Address string
    }
  3. 用於表示複合數據類型的值的複合字面量,更確切地講,它會被用來構造類型 Struct(結構體)、Array(數組)、Slice(切片)和Map(字典)的值。以下面的字面量能夠表示上面的那個 Person 結構體類型的值:

    Person(Name: "Eric Pan", Age: 28, Address: "Beijing China"}

4、類型

一個類型肯定了一類值的集合,以及能夠在這些值上施加的操做。類型能夠由類型名稱或者類型字面量指定,類型分爲基本類型和複合類型,基本類型的名稱能夠表明其自身,好比:

var name string

string 即爲一個基本類型,Go 語言中的基本類型有:bool、byte、int/uint、int8/uint八、int16/uint1六、int32/uint3二、int64/uint6四、float3二、float6四、complex6四、complex128,共18個,基本類型的名稱都必須預約義標識符。除了 bool 與 string 外,其它的都稱爲數值類型。

除了基本類型外,Go語言還有八個複合類型:Array(數組)、Struct(結構體)、Function(函數)、Interface(接口)、Slice(切片)、Map(字典)、Channel(通道)以及Pointer(指針)。

複合類型通常由若干(包括0)個其餘已被定義的類型組合而成,如定義一本書的結構體:

type Book struct {
     Name string
     ISBN string
     Press string
     TotalPages uint16
}

Go語言中的類型又能夠分爲靜態類型和動態類型,一個變量的靜態類型是指在變量聲明中示出的那個類型,絕大多數類型的變量都只擁有靜態類型,惟獨接口類型的變量例外,它除了擁有靜態類型以外,還擁有動態類型,這個動態類型表明了在運行時與該變量綁定在一塊兒的值的實際類型。

每個類型都會有一個潛在類型,若是這個類型是一個預約義的類型(也就是基本類型),或者是一個由類型字面量構造的複合類型,那麼它的潛在類型就是它自身,好比 string 類型的潛在類型就是 string,在上面提到的 Book 的潛在類型就是 Book,可是若是一個類型並不屬於上述狀況,那麼這個類型的潛在類型就是在類型聲明中的那個類型的潛在類型,好比咱們按如下方式聲明一個 MyString 類型:

type MyString string

MyString 類型的潛在類型就是 string 類型的潛在類型,實際上,咱們能夠將 MyString 看做是 string 類型的一個別名,在Go 語言中的基本數據類型 rune 類型就是如此,它能夠看做是 uint32 類型的一個別名類型,其潛在類型就是 uint32 ,可是一類要注意, MyString 與 string 卻並非一個相同的類型。

潛在類型在聲明過程當中是具備可傳遞性的,以下面咱們再聲明一個 iString 類型:

type iString MyString

iString 類型的潛在類型一樣就是 string 類型。

相關文章
相關標籤/搜索