版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Go語言基本語法第2章 Go語言基本語法變量數(shù)據(jù)類型打印格式化數(shù)據(jù)類型轉(zhuǎn)換常量類型別名(Type Alias)Go語言運算符運算符優(yōu)先級變量數(shù)據(jù)類型點擊查看本小節(jié)知識架構(gòu)打印格式化點擊查看本小節(jié)知識架構(gòu) 點擊查看本小節(jié)知識架構(gòu)數(shù)據(jù)類型轉(zhuǎn)換點擊查看本小節(jié)知識架構(gòu)常量點擊查看本小節(jié)知識架構(gòu) 2.42.5類型別名(Type Alias)點擊查看本小節(jié)知識架構(gòu)Go語言運算符點擊查看本小節(jié)知識架構(gòu) 2.62.7運算符優(yōu)先級2.8學習目標掌握掌握掌握掌握掌握變量的定義與使用1掌握Go語言運算符和運算符優(yōu)先級42掌握打印格式化和數(shù)據(jù)類型轉(zhuǎn)換3掌握安裝常量與枚舉2.1 變量2.1.1 變量的
2、概念變量是計算機語言中儲存數(shù)據(jù)的基本單元。變量的功能是存儲數(shù)據(jù)。變量可通過變量名(標識符)訪問,例如小千的年齡是18,就可以使用變量來引用18,如圖所示。變量的本質(zhì)是計算機分配的一小塊內(nèi)存,專門用于存放指定數(shù)據(jù),在程序運行過程中該數(shù)值可以發(fā)生改變;變量的存儲往往具有瞬時性,或者說是臨時存儲,當程序運行結(jié)束,存放該數(shù)據(jù)的內(nèi)存就會釋放,該變量就會隨著內(nèi)存的釋放而消失。就像日常生活中存放水的水杯,當水杯損壞的時候,裝在里面的水也會流失掉。2.1 變量2.1.1 變量的概念變量又分為局部變量和全局變量。局部變量,是定義在大括號()內(nèi)部的變量,花括號的內(nèi)部也叫作作用域。全局變量,是定義在函數(shù)和大括號()
3、外部的變量。Go 語言的變量名由字母、數(shù)字、下劃線組成,首個字符不能為數(shù)字;Go語法規(guī)定,定義的局部變量若沒有被調(diào)用會發(fā)生編譯錯誤。編譯報錯如下:表達式是值和操作符的組合,它們可以通過求值成為單個值?!皵?shù)據(jù)類型”是一類值,每個值都只屬于一種數(shù)據(jù)類型。2.1 變量2.1.2 聲明變量變量聲明有多種形式,未初始化的標準格式如下所示。定義一個變量名為a的int型變量,示例如下。未初始化的批量格式,不用每行都用var申明,具體語法格式如下。2.1 變量2.1.2 聲明變量未初始化變量的默認值,有如下特點:整形和浮點型變量默認值:0;字符串默認值為空字符串;布爾型默認值為false;函數(shù)、指針變量、切片
4、默認值為nil。初始化變量的標準格式:初始化變量的編譯器自動推斷類型格式:初始化變量的簡短聲明格式(短變量聲明格式):2.1 變量2.1.2 聲明變量分別使用以上三種方式定義一個名為a的變量,并初始化為10,示例如下:使用 := 賦值操作符,:= 可以高效地創(chuàng)建一個新的變量,稱之為初始化聲明。聲明語句省略了var 關(guān)鍵字,變量類型將由編譯器自動推斷。這是聲明變量的首選形式,但是它只能被用在函數(shù)體內(nèi),而不可以用于全局變量的聲明與賦值。該變量名必須是沒有定義過的變量,若定義過,將發(fā)生編譯錯誤。編譯報錯如下:2.1 變量2.1.2 聲明變量多個短變量聲明和賦值中,至少有一個新聲明的變量出現(xiàn)在左側(cè)中,
5、即使有其它變量名可能是重復(fù)聲明的,編譯器也不會報錯。情況如下所示。雖然這種方法不會報錯,但是在使用過程中應(yīng)盡量避免。2.1 變量2.1.3 變量多重賦值Go語法中,變量初始化和變量賦值是兩個不同的概念。Go語言的變量賦值與其他語言一樣,但是Go提供了其他程序員期待已久的多重賦值功能,可以實現(xiàn)變量交換。多重賦值讓Go語言比其他語言減少了代碼量。以簡單的算法交換變量為例,傳統(tǒng)寫法如下所示。新定義的變量是需要內(nèi)存的,于是有人設(shè)計了新的算法來取代中間變量,其中一種寫法如下如下所示。2.1 變量2.1.3 變量多重賦值以Go語言的多重賦值功能為例,寫法如下所示。從以上例子來看,Go語言的寫法明顯簡潔了許
6、多,需要注意,多重賦值時,左值和右值按照從左到右的順序賦值。這種方法在錯誤處理和函數(shù)當中會大量的使用。2.1 變量2.1.4 匿名變量Go語言的函數(shù)可以返回多個值,但并不是所有的返回值都用得上。這時就可以使用匿名變量,用“_”下畫線替換即可。例如,定義一個函數(shù),功能為返回兩個int型變量,第一個返回10,第二個返回20,第一次調(diào)用舍棄第二個返回值,第二次調(diào)用舍棄第一個返回值,具體語法格式如下所示。匿名變量既不占用命名空間,也不會分配內(nèi)存。2.2 數(shù)據(jù)類型在計算機中,操作的對象是數(shù)據(jù),那么大家來思考下,如何選擇合適的容器來存放數(shù)據(jù)才不至于浪費空間。先來看一個生活中的例子,某公司要快遞一本書,文件
7、袋和紙箱都可以裝載,但是,如果使用紙箱裝一本書,顯然有點大材小用,浪費紙箱的空間,如圖所示。生活中的容器不僅僅是容量大小的差別,還有類型上的區(qū)別,比如紙箱不能直接用來裝液體。在Go語言中,有以下幾種數(shù)據(jù)類型:2.2 數(shù)據(jù)類型基本數(shù)據(jù)類型(原生數(shù)據(jù)類型):整型、浮點型、布爾型、字符串、字符(byte、rune)。復(fù)合數(shù)據(jù)類型(派生數(shù)據(jù)類型):指針(pointer)、數(shù)組(array)、切片(slice)、映射(map)、函數(shù)(function)、結(jié)構(gòu)體(struct)、通道(channel)。2.2 數(shù)據(jù)類型2.2.1 整型1整型分兩大類按長度分:int8、int16、int32、int64、i
8、nt;無符號整型:uint8、uint16、uint32、uint64、uint。其中uint8就是byte型,int16對應(yīng)C語言的short型,int64對應(yīng)C語言的long型。對整型的詳細描述,如表所示。2.2 數(shù)據(jù)類型2.2.1 整型聲明方式如下所示。2.2 數(shù)據(jù)類型2.2.2 浮點型浮點類型表示存儲的數(shù)據(jù)是實數(shù),如3.145。關(guān)于浮點類型的說明,如表所示。聲明方式如下所示。float32的最大范圍是3.4e38,用常量定義是:math.MaxFloat32,在代碼中直接使用可以代表最大范圍的值。float64的最大范圍是1.8e308,用常量定義是:math.MaxFloat64,在
9、代碼中直接使用可以代表最大范圍的值。2.2 數(shù)據(jù)類型2.2.3 復(fù)數(shù)復(fù)數(shù)型用于表示數(shù)學中的復(fù)數(shù),如1+2j、1-2j、-1-2j等。關(guān)于復(fù)數(shù)類型的說明,如表所示。2.2 數(shù)據(jù)類型2.2.4 布爾型布爾型用系統(tǒng)標識符bool表示。在其他編程語言中,對于布爾類型的值定義,非0表示真,0表示假。而在go語言中,只可以是常量 true 或者 false。聲明方式如下所示。布爾型無法參與數(shù)值運算,也無法與其他類型進行轉(zhuǎn)換。2.2 數(shù)據(jù)類型2.2.5 字符串字符串在Go語言中是以基本數(shù)據(jù)類型出現(xiàn)的,使用字符串就像使用其他原生基本數(shù)據(jù)類型int、float32、float64、bool一樣。字符串在C+語言
10、中,是以類的方式進行封裝,不屬于基本數(shù)據(jù)類型。在字符串中,有些字符都沒有現(xiàn)成的文字代號。因此只能用轉(zhuǎn)義字符來表示 。常用的轉(zhuǎn)義字符如表所示。2.2 數(shù)據(jù)類型2.2.5 字符串定義多行字符串的方法如下。 雙引號書寫字符串被稱為字符串字面量(string literal),這種字面量不能跨行; 多行字符串需要使用“”反引號,多用于內(nèi)嵌源碼和內(nèi)嵌數(shù)據(jù); 在反引號中的所有代碼不會被編譯器識別,而只是作為字符串的一部分。2.2 數(shù)據(jù)類型2.2.6 字符字符串中的每一個元素叫做“字符”,定義字符時使用單引號。Go語言的字符有兩種,如表所示。聲明示例如下所示。2.3 打印格式化2.3.1 通用打印格式化通常
11、使用fmt包,通用的打印格式如表所示。具體的使用方法,如例所示。2.3 打印格式化2.3.2 布爾值布爾值的具體打印格式如表所示。具體的使用方法,如例所示。2.3 打印格式化2.3.3 整數(shù)整型的具體打印格式如表所示。2.3 打印格式化2.3.3 整數(shù)具體的使用方法,如例所示。2.3 打印格式化2.3.4 浮點數(shù)和復(fù)數(shù)浮點型的具體打印格式如表所示。具體的使用方法,如例所示。2.3 打印格式化2.3.4 浮點數(shù)和復(fù)數(shù)關(guān)于復(fù)數(shù)類型的打印演示,如例所示。2.3 打印格式化2.3.5 字符串和byte字符串和byte的具體打印格式如表所示。 具體的使用方法,如例所示。2.4 數(shù)據(jù)類型轉(zhuǎn)換2.4.1 基
12、本語法Go語言采用數(shù)據(jù)類型前置加括號的方式進行類型轉(zhuǎn)換。格式如:T(表達式),T表示要轉(zhuǎn)換的類型;表達式包括變量、數(shù)值、函數(shù)返回值等。類型轉(zhuǎn)換時,需要考慮兩種類型之間的關(guān)系和范圍,是否會發(fā)生數(shù)值截斷。就像將1000毫升的水倒入容積為500毫升的瓶子里,余出來500毫升的水便會流失。值得注意的是,布爾型無法與其他類型進行轉(zhuǎn)換。使用示例如下。2.4 數(shù)據(jù)類型轉(zhuǎn)換2.4.2 float類型與int類型之間轉(zhuǎn)換float和int的類型精度不同,使用時需要注意float轉(zhuǎn)int時精度的損失。具體的使用方法,如例所示。2.4 數(shù)據(jù)類型轉(zhuǎn)換2.4.3 int類型與string類型之間轉(zhuǎn)換1. int類型轉(zhuǎn)換
13、為string類型這種類型的轉(zhuǎn)換,其實相當于是byte或rune轉(zhuǎn)string。該int數(shù)值是ASCII碼的編號或Unicode字符集的編號。轉(zhuǎn)成string就是將根據(jù)字符集,將對應(yīng)編號的字符查找出來。當該數(shù)值超出Unicode編號范圍,則轉(zhuǎn)成的字符串顯示為亂碼。例如19968轉(zhuǎn)string,就是“一”?!緜渥ⅲ骸緼SCII字符集中數(shù)字的10進制范圍是30 - 39;ASCII字符集中大寫字母的10進制范圍是65 - 90;ASCII字符集中小寫字母的10進制范圍是97 - 122;Unicode字符集中漢字的范圍是4e00-9fa5,10進制范圍是19968 - 40869。2.4 數(shù)據(jù)類型
14、轉(zhuǎn)換2.4.3 int類型與string類型之間轉(zhuǎn)換詳情如表所示。2.4 數(shù)據(jù)類型轉(zhuǎn)換2.4.3 int類型與string類型之間轉(zhuǎn)換具體的使用方法,如例所示。2.string類型轉(zhuǎn)換為int類型在Go語言中,不允許字符串轉(zhuǎn)int,會產(chǎn)生如下錯誤。2.5 常量2.5.1 聲明方式相對于變量,常量是恒定不變的值,例如圓周率。常量是一個簡單值的標識符,在程序運行時,不會被修改。常量中的數(shù)據(jù)類型只可以是布爾型、數(shù)字型(整數(shù)型、浮點型和復(fù)數(shù))和字符串型。常量的定義格式:可以省略類型說明符 type,因為編譯器可以根據(jù)變量的值來自動推斷其類型。 顯式類型定義: 隱式類型定義: 多個相同類型的聲明可以簡寫
15、為:常量定義后未被使用,不會在編譯時出錯。2.5 常量2.5.2 常量用于枚舉(常量組)假設(shè)數(shù)字 0、1 和 2 分別代表未知性別、女性和男性。格式如例所示。常量組中如果不指定類型和初始值,則與上一行非空常量的值相同,如例所示。2.5 常量2.5.3 iotaiota,特殊常量值,是一個系統(tǒng)定義的可以被編譯器修改的常量值。iota只能被用在常量的賦值中。在每一個const關(guān)鍵字出現(xiàn)時,被重置為0,然后每出現(xiàn)一個常量,iota所代表的數(shù)值會自動增加1。iota可以理解成常量組中常量的計數(shù)器,不論該常量的值是什么,只要有一個常量,那么iota就加1。iota 可以被用作枚舉值,如例所示:第一個 i
16、ota 等于 0,每當 iota 在新的一行被使用時,它的值都會自動加 1;所以 a=0, b=1, c=2。2.5 常量2.5.3 iota常量組中如果不指定類型和初始值,則與上一行非空常量的值相同。所以上述的枚舉可以簡寫為如例所示。2.6 類型別名(Type Alias)2.6.1 概要類型別名是Go1.9版本添加的新功能。說到類型別名,無非是給類型名取一個比較有特殊含義的名字而已,就像武俠小說中的東邪西毒。假如在教室中,有兩個同學叫張三,老師為了區(qū)分他們,通常會給他們起個別名:大張三、小張三。對于編程而言,類型別名主要用于解決兼容性的問題。在Go1.9版本前內(nèi)建類型定義的代碼是:而在Go
17、1.9版本之后變更為:2.6 類型別名(Type Alias)2.6.2 類型別名與類型定義類型別名的語法格式:定義類型的語法格式:例如:該語句是將NewString定義為string類型。通過type關(guān)鍵字,NewString會形成一種新的類型。NewString本身依然具備string的特性。該語句是將StringAlias定義為string的一個別名。使用StringAlias與string等效。別名類型只會在代碼中存在,編譯完成時,不會有別名類型。2.6 類型別名(Type Alias)2.6.2 類型別名與類型定義出于對程序性能的考慮,最佳建議如下:盡可能的使用 := 去初始化聲明一
18、個變量(在函數(shù)內(nèi)部);可能的使用字符代替字符串;2.7 Go語言運算符運算符用于在程序運行時執(zhí)行數(shù)學或邏輯運算。Go 語言內(nèi)置的運算符包括算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、賦值運算符、其他運算符。2.7 Go語言運算符2.7.1 算術(shù)運算符Go語言的算術(shù)運算符如表所示。假定 A 值為 10,B 值為 20。算術(shù)運算符的用法如例所示。2.7 Go語言運算符2.7.2 關(guān)系運算符Go語言的關(guān)系運算符如表所示。假定 A 值為 10,B 值為 20。2.7 Go語言運算符2.7.2 關(guān)系運算符關(guān)系運算符的用法如例所示。2.7 Go語言運算符2.7.3 邏輯運算符Go語言的邏輯運算符,如表所
19、示。假定 A 值為 True,B 值為 False。邏輯運算符的用法,如例所示。2.7 Go語言運算符2.7.4 位運算符位運算符對整數(shù)在內(nèi)存中的二進制位進行操作。位運算符比一般的算術(shù)運算符速度要快,而且可以實現(xiàn)一些算術(shù)運算符不能實現(xiàn)的功能。如果要開發(fā)高效率程序,位運算符是必不可少的。位運算符用來對二進制位進行操作,包括:按位與(&)、按位或(|)、按位異或()、按位左移()。假定 A = 60; B = 13; 其二進制數(shù)轉(zhuǎn)換為:2.7 Go語言運算符2.7.4 位運算符Go 語言支持的位運算符如表所示。假定 A 為60,B 為13。2.7 Go語言運算符2.7.4 位運算符1按位與按位與(
20、&):對兩個數(shù)進行操作,然后返回一個新的數(shù),數(shù)的每個位都需要兩個輸入數(shù)的同一位都為1 時才為1。簡單說就是:同一位同時為1則為1。如圖所示。252的二進制可以表示為11111100,63的二進制可以表示為00111111,將每一位都進行與運算后結(jié)果為00111100,轉(zhuǎn)換為十進制的結(jié)果為60。2.7 Go語言運算符2.7.4 位運算符2按位或按位與(|):比較兩個數(shù),然后返回一個新的數(shù),數(shù)的每一位設(shè)置1的條件是任意一個數(shù)的同一位為1 則為1。簡單說就是:同一位其中一個為1則為1。如圖所示。178的二進制可以表示為10110010,94的二進制可以表示為01011110,將每一位都進行或運算后的
21、結(jié)果為11111110,轉(zhuǎn)換為十進制的結(jié)果為254。2.7 Go語言運算符2.7.4 位運算符3按位異或按位異或():比較兩個數(shù),然后返回一個數(shù),數(shù)的每個位設(shè)為1 的條件是兩個輸入數(shù)的同一位不同則為1,如果相同就設(shè)為0。簡單說就是同一位不相同則為1。如圖所示。20的二進制可以表示為00010100,5二進制可以表示為00000101,將每一位都進行異或運算后的結(jié)果為00010001,轉(zhuǎn)換為十進制的結(jié)果為17。2.7 Go語言運算符2.7.4 位運算符4左移運算符()按二進制形式把所有的數(shù)字向左移動對應(yīng)的位數(shù),高位移出(舍棄),低位的空位補零。(1)語法格式需要移位的數(shù)字 移位的次數(shù)例如: 3 )按二進制形式把所有的數(shù)字向右移動對應(yīng)位移位數(shù),低位移出(舍棄),高位的空位補符號位,即正數(shù)補零,負數(shù)補1。(1)語法格
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人創(chuàng)業(yè)無息貸款支持合同(二零二五版)3篇
- 2025年度個人房屋抵押貸款合同標準范本4篇
- 2025年度勞動合同終止及離職員工離職手續(xù)辦理協(xié)議4篇
- 建筑用木材采購合同(2篇)
- 工廠交叉作業(yè)安全管理協(xié)議書(2篇)
- 2025年消防設(shè)施技術(shù)改造合作協(xié)議范本3篇
- 2024年咨詢工程師(經(jīng)濟政策)考試題庫(a卷)
- 水管檢修口施工方案
- 二零二五年度門窗行業(yè)市場調(diào)研與分析合同7篇
- 春節(jié)最幸福的描寫作文四篇
- 衡水市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(全真題庫)
- 護理安全用氧培訓課件
- 《三國演義》中人物性格探析研究性課題報告
- 注冊電氣工程師公共基礎(chǔ)高數(shù)輔導課件
- 土方勞務(wù)分包合同中鐵十一局
- 乳腺導管原位癌
- 冷庫管道應(yīng)急預(yù)案
- 司法考試必背大全(涵蓋所有法律考點)
- 公共部分裝修工程 施工組織設(shè)計
- 《學習教育重要論述》考試復(fù)習題庫(共250余題)
- 裝飾裝修施工及擔保合同
評論
0/150
提交評論