您好,登錄后才能下訂單哦!
在編程語言中,詞法是代碼的構(gòu)成法則。也就是說,詞法規(guī)定了我們敲入怎樣的字符才能編寫出編譯器 能夠識別的代碼,所以要掌握一門語言,那么語言的詞法是我們要學(xué)習(xí)的第一步,Go語言也不過如此。
源代碼表示
Go語言的代碼是由若干Unicode字符組成,Unicode編碼規(guī)范是一種在計(jì)算機(jī)上使用的字符編碼 方式,它為世界上存在的各種語言的每個(gè)字符都設(shè)定了統(tǒng)一且唯一的二進(jìn)制編碼。因此,它能夠滿足跨語言、 跨平臺的轉(zhuǎn)換和文本處理需求,關(guān)于Unicode更詳細(xì)說明,參見官網(wǎng) Unicode。 當(dāng)前,你只需要記住一條規(guī)則:
Go語言的源代碼是由Unicode編碼規(guī)范的UTF-8格式進(jìn)行編碼的。
注釋
- 行注釋: 用兩斜杠"http://"開始到這一行結(jié)束 - 塊注釋: 從"/*" 開始到 "*/"結(jié)束
Go語言的詞法元素包括4類:
標(biāo)志符 (identifier)
關(guān)鍵字 (keyword)
運(yùn)算符 (operator)和分隔符 (delimiter)
字面量 (literal)
一般情況下,空格符、制表符、回車符和換行符都會被忽略,除非它們作為多個(gè)語言符號之間的分隔符的一部分。 另外,Go語言會自動(dòng)為代碼插入分號以進(jìn)行語句分隔,所以不在特殊情況下不需要顯示的插入分號;
標(biāo)志符就是對變量、常量、函數(shù)以及自定義類型進(jìn)行命名。Go語言標(biāo)志符的命名規(guī)范是由若干字母、下劃線"_"和數(shù)字組成的字符序列,字符序列的第一個(gè)字符必須為字母,且首字母 標(biāo)志符是區(qū)分大小寫的。在使用標(biāo)志符之前必須進(jìn)行聲明,一個(gè)聲明就是將一個(gè)非空的標(biāo)志符與常量、類型、變量、函數(shù)或代碼包綁定在一起。在 同一個(gè)代碼區(qū)塊中,不允許重復(fù)聲明同一個(gè)標(biāo)志符,并且該標(biāo)志符的作用域與所屬代碼區(qū)塊的范圍相同。
預(yù)定義標(biāo)志符
Go語言中有一類特殊的標(biāo)志符,被叫做預(yù)定義標(biāo)志符。這類標(biāo)志符是在Go語言的源代碼中被聲明的,具體聲明如下:
基本數(shù)據(jù)類型名: int、float、string... 接口類型名:error 常量名:true,false和iota 內(nèi)建函數(shù)名:append,cap,close,complex,copy,delete,imag,len,make,new,panic,print,println,real,recover
空標(biāo)志符
Go語言有一個(gè)名為 "_" 的特殊標(biāo)志符,叫(blank identifier)。通常作為忽略占位符使用,可以作表達(dá)式左值,但無法讀取內(nèi)容。 空標(biāo)志符也常用來臨時(shí)規(guī)避對未使用變量和導(dǎo)入包的錯(cuò)誤檢查,但需注意的是,它也屬于預(yù)定義標(biāo)志符。
限定標(biāo)志符
在Go語言開發(fā)過程中,會經(jīng)常訪問其他代碼包中的變量或類型,這時(shí)就需要用到限定標(biāo)志符。 可以把代碼包名稱稱作是限定標(biāo)志符前綴,前綴和包中的標(biāo)志符之間用英文的點(diǎn)(".")符號分隔。 要應(yīng)用其它代碼包中的標(biāo)志符時(shí),需要滿足兩個(gè)前提:
代碼包必須被提前導(dǎo)入到該代碼文件中
該標(biāo)志符在代碼包必須是可被導(dǎo)出的
怎么才算是標(biāo)志符可被導(dǎo)出的呢?
標(biāo)志符名稱中的第一個(gè)字符必須大寫
標(biāo)志符必須是被聲明在一個(gè)代碼包中的變量、類型、結(jié)構(gòu)體類型的字段名、函數(shù)或方法名稱等。
因?yàn)镚o語言根據(jù)標(biāo)志符名稱中的第一個(gè)字母的大小寫來確定該標(biāo)志符的訪問權(quán)限;具體規(guī)則是當(dāng)標(biāo)志符名稱的第一個(gè)字符為小寫時(shí), 其訪問權(quán)限就是"包級私有的",只有與該標(biāo)志符在一個(gè)代碼包的代碼才能訪問到它。 當(dāng)標(biāo)志符名稱的第一個(gè)字符為大寫時(shí),其訪問權(quán)限為"公開的", 意味著該標(biāo)志符可以被任何代碼包的任何代碼通過限定標(biāo)志符訪問。
用一個(gè)例子來總結(jié)上面的內(nèi)容!
package main //main 包名標(biāo)志符import ( //import 導(dǎo)入其它代碼包 "fmt" //fmt 標(biāo)準(zhǔn)代碼包名標(biāo)志符 "strconv" // strconv 標(biāo)準(zhǔn)代碼包名標(biāo)志符)func main() { //main 函數(shù)名標(biāo)志符 var s string = "10010" //string 預(yù)定義標(biāo)志符 v, _ := strconv.Atoi(s) //v自定義標(biāo)志符,_空白標(biāo)志符 fmt.Printf("%T, %v", v, v) //fmt.Printf 限定標(biāo)志符}
注意: 代碼包標(biāo)志符并不屬于任何一個(gè)作用域,代碼包聲明只是為了區(qū)分若干源代碼文件 是否屬于同一個(gè)代碼包。或者指定導(dǎo)入代碼包時(shí)代表該代碼包的引用名稱。
命名建議:
盡量使用短命名,長名字并非你想象的那么更易讀,多加文檔和注釋比格外長的名字更實(shí)用
混合大小寫,且使用駝峰拼寫格式,注意首字母的大小寫愿意
保持package的名字和目錄保持一致,盡量采取簡短有意義的包名,不要和標(biāo)準(zhǔn)庫名稱沖突,包名應(yīng)該為小寫單詞,不要使用下劃線或者混合大小寫
函數(shù)參數(shù)和返回值以小寫字母開頭
不要使用保留關(guān)鍵字作為標(biāo)志符
不建議使用與預(yù)定義常量、類型、內(nèi)置函數(shù)相同的名字作為標(biāo)志符
專有名字通常全部大寫
在計(jì)算機(jī)科學(xué)中,字面量是用于表達(dá)源代碼中一個(gè)固定基本值的表示法(notation)。幾乎所有計(jì)算機(jī)編程 語言都具有對基本值的字面量表示,比如:整數(shù)、浮點(diǎn)數(shù)、字符串、字符和布爾類型的數(shù)值都有對應(yīng)的 字面量表示; 比如:數(shù)字15這個(gè)值是唯一的,但表示的方式有很多種:
二進(jìn)制表達(dá):1111 八進(jìn)制表達(dá):017 十進(jìn)制表達(dá):15 十六進(jìn)制表達(dá):0xF
對于開發(fā)者來說,當(dāng)然知道要表達(dá)的意思,但是要把這種思想傳達(dá)給編譯器, 因?yàn)榫幾g器對源代碼做詞法分析時(shí)會自動(dòng)判決當(dāng)前用戶的輸入屬于哪一類字面量;
go語言的字面量與變量類型應(yīng)關(guān)系:
字面量種類 | 變量的類型 | 舉例 |
---|---|---|
布爾 | bool | true/false |
字符 | rune | 包含在單引號''之中的字符 |
整型 | int | 15, 017與0xF |
浮點(diǎn) | float64 | 0.,1.1,1.e+0.1E6,.25,.25e+5 |
復(fù)數(shù) | complex128 | |
字符串 | string | 包含在雙引號 ""或反引號 ``之中 |
舉例說明一下:
package mainimport ( "fmt" "reflect")func main() { i := 0xf f := .25 c := 'c' s := `go` cx := 011i fmt.Println(reflect.ValueOf(i), reflect.TypeOf(i)) fmt.Println(reflect.ValueOf(f), reflect.TypeOf(f)) fmt.Println(reflect.ValueOf(c), reflect.TypeOf(c)) fmt.Println(reflect.ValueOf(s), reflect.TypeOf(s)) fmt.Println(reflect.ValueOf(cx), reflect.TypeOf(cx)) } 輸出:15 int0.25 float6499 int32go string(0+11i) complex128
字面量的通俗理解:編譯器根據(jù)用戶的輸入,推論出輸入的數(shù)據(jù)屬于什么數(shù)據(jù)類型。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。