版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Go語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程(微課版)1.1Go語(yǔ)言概況.pptx1.2初識(shí)Go程序.pptx 2.1基本運(yùn)算.pptx 2.2復(fù)合數(shù)據(jù)類型.pptx 2.3流程控制.pptx 2.4循環(huán)控制.pptx 3.1函數(shù).pptx 3.2函數(shù)的使用.pptx 3.3變參與遞歸函數(shù).pptx 3.4Go語(yǔ)言特有函數(shù).pptx 4.1結(jié)構(gòu)體.pptx 4.2結(jié)構(gòu)體進(jìn)階.pptx 4.3結(jié)構(gòu)體內(nèi)嵌.pptx 4.4接口與結(jié)構(gòu)體.pptx 5.1反射與文件.pptx 5.2并發(fā).pptx 6.1數(shù)據(jù)庫(kù)基本操作.pptx 6.2CRUD操作.pptx 7.1初識(shí)Gin.pptx 7.2路由.pptx 7.3中間件.pptx
Go語(yǔ)言概況Go語(yǔ)言的發(fā)展歷程Go語(yǔ)言的應(yīng)用領(lǐng)域Go語(yǔ)言的特性Go程序運(yùn)行環(huán)境01.03.02.04.目錄01Go語(yǔ)言的發(fā)展歷程Go語(yǔ)言的誕生Go語(yǔ)言的重要里程碑2008年初,Unix之父肯·湯普遜實(shí)現(xiàn)了第一版Go編譯器。1Go語(yǔ)言的發(fā)展歷程1Go語(yǔ)言的發(fā)展歷程2009年11月10日Go語(yǔ)言誕生日2012年3月28日Go1.0發(fā)布同時(shí)發(fā)布“Go1兼容性”承諾2015年8月11日Go1.5發(fā)布完全移除C語(yǔ)言部分2018年8月25日Go1.11發(fā)布引入新的Go包管理機(jī)制:GoModules2021年2月17日Go1.16發(fā)布GoModules成為默認(rèn)包管理機(jī)制2021年8月16日Go1.17發(fā)布將Go程序性能提高約5%2022年3月15日Go1.18發(fā)布支持泛型、模糊測(cè)試、工作區(qū)2022年8月3日Go1.19發(fā)布完善Go1.18,豐富文檔注釋語(yǔ)法02Go語(yǔ)言的特性編譯快,效率高易學(xué)習(xí),成本低強(qiáng)大的標(biāo)準(zhǔn)庫(kù)簡(jiǎn)單的高并發(fā)便捷的應(yīng)用良好的規(guī)范持續(xù)的發(fā)展編譯快,效率高相較于Java和C++相對(duì)較慢的編譯速度,Go語(yǔ)言的編譯速度快是一個(gè)主要的優(yōu)勢(shì)。易學(xué)習(xí),成本低Go語(yǔ)言語(yǔ)法簡(jiǎn)單,與C語(yǔ)言的語(yǔ)法類似。強(qiáng)大的標(biāo)準(zhǔn)庫(kù)Go語(yǔ)言中的標(biāo)準(zhǔn)庫(kù)非常穩(wěn)定并且豐富多樣,包括網(wǎng)絡(luò)、系統(tǒng)、加密、編碼、圖形等各個(gè)方面。簡(jiǎn)單的高并發(fā)Go語(yǔ)言的Goroutine和Channel的出現(xiàn)讓處理并發(fā)和異步編程的問(wèn)題變得優(yōu)雅和流暢。便捷的應(yīng)用不依賴任何系統(tǒng)提供的編譯器和鏈接器,其編譯出來(lái)的二進(jìn)制可執(zhí)行文件幾乎可以運(yùn)行在任何系統(tǒng)環(huán)境中。良好的規(guī)范除代碼規(guī)范之外還擁有強(qiáng)大的編譯檢查、嚴(yán)格的編碼規(guī)范和很強(qiáng)的穩(wěn)定性。持續(xù)的發(fā)展Google公司聚集了一批具備世界水準(zhǔn)的軟件工程師。2Go語(yǔ)言的特性03Go語(yǔ)言的應(yīng)用領(lǐng)域服務(wù)器端云計(jì)算云服務(wù)區(qū)塊鏈大數(shù)據(jù)、人工智能C和C++能做的事情,Go語(yǔ)言都可以做Go語(yǔ)言目前在服務(wù)器端的落地應(yīng)用有:數(shù)據(jù)打包、日志處理、文件系統(tǒng)、數(shù)據(jù)庫(kù)代理、Web應(yīng)用、API應(yīng)用等云計(jì)算時(shí)代的C語(yǔ)言Go語(yǔ)言目前在云計(jì)算的落地應(yīng)用有:京東的消息推送服務(wù)、京東分布式文件系統(tǒng)3Go語(yǔ)言的應(yīng)用領(lǐng)域區(qū)塊鏈的主流開(kāi)發(fā)語(yǔ)言正是Go語(yǔ)言Go語(yǔ)言目前在區(qū)塊鏈的落地應(yīng)用有:以太坊、金鏈盟區(qū)塊鏈技術(shù)框架FISCO-BCOSGo語(yǔ)言非常適合做數(shù)據(jù)挖掘、分析、存儲(chǔ)Go語(yǔ)言目前在人工智能和大數(shù)據(jù)的落地應(yīng)用有:pholcus(爬蟲(chóng))、TiDB(存儲(chǔ))、針對(duì)Tensorflow編寫各種API3Go語(yǔ)言的應(yīng)用領(lǐng)域04Go程序運(yùn)行環(huán)境程序的定義開(kāi)發(fā)(運(yùn)行)環(huán)境運(yùn)行步驟要想讓計(jì)算機(jī)完成某個(gè)任務(wù),就需要將任務(wù)分解為能夠讓計(jì)算機(jī)識(shí)別的指令,最終將指令匯合形成程序。4Go程序運(yùn)行環(huán)境使用文本編輯器創(chuàng)建Go程序保存文件編譯程序運(yùn)行編譯得到的可執(zhí)行文件4Go程序運(yùn)行環(huán)境名詞解釋$GOROOTGo的實(shí)際安裝路徑$GOARCH計(jì)算機(jī)的處理器架構(gòu)(x86、ARM等)$GOOS計(jì)算機(jī)的操作系統(tǒng)(Windows、Linux等)$GOBIN編譯器和鏈接器的安裝位置,默認(rèn)是$GOROOT/bin$GOPATH項(xiàng)目的工作目錄,內(nèi)含三個(gè)規(guī)定的目錄:src(存放源碼文件)、pkg(存放包文件)和bin(存放可執(zhí)行文件)4Go程序運(yùn)行環(huán)境4Go程序運(yùn)行環(huán)境謝謝觀看初識(shí)Go程序開(kāi)發(fā)工具GoModules01.02.目錄第一個(gè)Go語(yǔ)言程序03.編譯與運(yùn)行04.01開(kāi)發(fā)工具開(kāi)發(fā)工具定義GoLandLitelDEVSCodeEclipseVimEmacs1開(kāi)發(fā)工具用于輔助軟件生命周期過(guò)程的基于計(jì)算機(jī)的工具,能夠很方便地把一種編程語(yǔ)言代碼化并編譯執(zhí)行。開(kāi)發(fā)工具用戶易操作功能強(qiáng)大很方便修改、擴(kuò)展覆蓋面大可靠性高1開(kāi)發(fā)工具是Jetbrains針對(duì)Go語(yǔ)言所開(kāi)發(fā)的一款商業(yè)IDEGoLand整合了IntelliJ平臺(tái)提供了針對(duì)Go語(yǔ)言的編碼輔助和工具集成對(duì)代碼編寫、自動(dòng)補(bǔ)全和運(yùn)行調(diào)試都有極大的幫助是大多數(shù)開(kāi)發(fā)者的首選工具GoLand1開(kāi)發(fā)工具一款國(guó)人所設(shè)計(jì)開(kāi)發(fā)的Go集成開(kāi)發(fā)環(huán)境一款非常好用的輕量級(jí)Go語(yǔ)言集成開(kāi)發(fā)環(huán)境支持跨平臺(tái)開(kāi)發(fā)包含了抽象語(yǔ)法樹(shù)視圖的功能支持在各個(gè)Go開(kāi)發(fā)環(huán)境之間隨意切換支持交叉編譯LitelDE1開(kāi)發(fā)工具全稱是VisualStudioCode由微軟Microsoft所開(kāi)發(fā)的一款免費(fèi)的開(kāi)發(fā)工具具有簡(jiǎn)單、輕快、開(kāi)放的特點(diǎn)支持多種語(yǔ)言,默認(rèn)提供Go語(yǔ)言的語(yǔ)法高亮在安裝Go語(yǔ)言插件之后,還可以支持智能提示、編譯運(yùn)行等諸多實(shí)用功能VSCode1開(kāi)發(fā)工具開(kāi)放式IDE的鼻祖是一個(gè)開(kāi)源免費(fèi)的平臺(tái)安裝不同的插件即可運(yùn)行不同的語(yǔ)言提供了GoEclipse插件Eclipse1開(kāi)發(fā)工具從vi發(fā)展出來(lái)的一個(gè)Linux平臺(tái)的文本編輯器以字體顏色辨別語(yǔ)法的正確性具有代碼補(bǔ)全、編譯及錯(cuò)誤跳轉(zhuǎn)等功能是很多程序員在Linux下必備的一款工具Vim1開(kāi)發(fā)工具一款運(yùn)行在Linux和Unix系統(tǒng)下的文本編輯器具有強(qiáng)大的可擴(kuò)展性同時(shí)也是一個(gè)集成開(kāi)發(fā)環(huán)境Emacs02GoModulesGoModules的出現(xiàn)gomod命令2GoModulesgo1.11之前代碼開(kāi)發(fā)必須在gopathsrc目錄下,不然在執(zhí)行過(guò)程中會(huì)遇到問(wèn)題。使用gopath進(jìn)行管理,極其依賴手動(dòng)管理,并且依賴包沒(méi)有版本可言。后推出govendor解決了包依賴,一個(gè)配置文件就管理;但是依賴包全都下載到項(xiàng)目vendor下,導(dǎo)致每個(gè)項(xiàng)目都會(huì)持有一部分相同文件。go1.11推出特性gomodules,用于解決之前沒(méi)有地方記錄依賴包具體版本的問(wèn)題,方便依賴包的管理。Modules是相關(guān)Go包的集合,是源代碼交換和版本控制的單元。Modules和傳統(tǒng)的GOPATH不同,不需要包含例如src,bin這樣的子目錄,一個(gè)源代碼目錄甚至是空目錄都可以作為Modules,只要其中包含有g(shù)o.mod文件。gomod相關(guān)命令初始化項(xiàng)目gomodinit+模塊名稱項(xiàng)目如果不在GOPATH下,則必須要有g(shù)o.mod文件,否則運(yùn)行會(huì)報(bào)錯(cuò)命令作用gomoddownload下載依賴包到本地(默認(rèn)為GOPATH/pkg/mod目錄)gomodedit編輯go.mod文件gomodgraph打印模塊依賴圖gomodinit初始化當(dāng)前文件夾,創(chuàng)建go.mod文件gomodtidy增加缺少的包,刪除無(wú)用的包gomodvendor將依賴復(fù)制到vendor目錄下gomodverify校驗(yàn)依賴gomodwhy解釋為什么需要依賴2GoModules03第一個(gè)Go程序包的認(rèn)識(shí)fmt包main()函數(shù)程序結(jié)構(gòu)3第一個(gè)Go程序packagemain //指定其所在的包import“fmt“ //導(dǎo)入fmt包funcmain(){ //main()函數(shù)是程序的入口fmt.Println("不忘初心,牢記使命!")}在Go語(yǔ)言中所有的文件都需要指定其所在的包(package)運(yùn)行結(jié)果為:不忘初心,牢記使命!"包有兩種類型main包在代碼的開(kāi)頭使用packagemain進(jìn)行聲明非main包在代碼的開(kāi)頭使用package+包名進(jìn)行聲明3第一個(gè)Go程序import"fmt"是導(dǎo)入fmt包fmt包實(shí)現(xiàn)了類似C語(yǔ)言printf和scanf的格式化I/O注意:import導(dǎo)入的是相對(duì)路徑,而不是包名Println()是fmt包中的一個(gè)函數(shù),用來(lái)格式化輸出數(shù)據(jù)3第一個(gè)Go程序Go語(yǔ)言程序結(jié)構(gòu)包聲明引入包函數(shù)變量語(yǔ)句&表達(dá)式注釋易錯(cuò)點(diǎn)注意“{”不能單獨(dú)放在一行;否則會(huì)在運(yùn)行時(shí)產(chǎn)生“syntaxerror:unexpectedsemicolonornewlinebefore{”的錯(cuò)誤。在整個(gè)程序中有且僅能有一個(gè)main函數(shù);如果出現(xiàn)多個(gè)main函數(shù)則不能正常運(yùn)行。04編譯與運(yùn)行g(shù)obuildgorun4編譯與運(yùn)行Go語(yǔ)言中使用gobuild命令主要用于編譯代碼gobuild命令會(huì)將1.2-hello.go文件編譯成1.2-hello.exe文件GoLand的Run‘gobuild1.2-hello.go’操作會(huì)運(yùn)行編譯后的1.2-hello.exe文件,在文件運(yùn)行結(jié)束后會(huì)自動(dòng)刪除1.2-hello.exe文件gorun命令也能夠編譯源碼不會(huì)在當(dāng)前目錄留下可執(zhí)行文件把編譯和執(zhí)行合為一步完成本質(zhì)是:把編譯過(guò)程隱藏了起來(lái),編譯過(guò)程依然存在,可執(zhí)行文件被放在臨時(shí)文件中被執(zhí)行4編譯與運(yùn)行謝謝觀看基本運(yùn)算關(guān)鍵字與標(biāo)識(shí)符數(shù)據(jù)類型變量和常量運(yùn)算符01.03.02.04.目錄字符串拼接05.數(shù)據(jù)類型轉(zhuǎn)換06.01關(guān)鍵字和標(biāo)識(shí)符25個(gè)關(guān)鍵字標(biāo)識(shí)符命名規(guī)則1關(guān)鍵字和標(biāo)識(shí)符breakdefaultfuncinterfaceselectcasedefergomapstructchanelsegotopackageswitchconstfallthroughifrangetypecontinueforimportreturnvar關(guān)鍵字:被賦予了特殊含義的單詞,又叫保留字。Go語(yǔ)言中的關(guān)鍵字一共有
25個(gè)。標(biāo)識(shí)符特點(diǎn)標(biāo)識(shí)符的命名要盡量采取簡(jiǎn)短且有意義。不能和標(biāo)準(zhǔn)庫(kù)中的包名重復(fù)。為變量、函數(shù)、常量命名時(shí)采用駝峰命名法,例如stuId、stuName。標(biāo)識(shí)符聲明使用標(biāo)識(shí)符之前必須進(jìn)行聲明。聲明一個(gè)標(biāo)識(shí)符就是將這個(gè)標(biāo)識(shí)符與常量、類型、變量、函數(shù)或者代碼包綁定在一起。在同一個(gè)代碼塊內(nèi)標(biāo)識(shí)符的名稱不能重復(fù)。標(biāo)識(shí)符定義Go語(yǔ)言對(duì)各種變量、方法、函數(shù)等命名時(shí)使用的字符序列。由若干個(gè)字母、下劃線(_)、和數(shù)字組成,且第一個(gè)字符必須是字母。1關(guān)鍵字和標(biāo)識(shí)符標(biāo)識(shí)符規(guī)則由26個(gè)英文字母、0~9、_組成不能以數(shù)字開(kāi)頭Go語(yǔ)言中嚴(yán)格區(qū)分大小寫標(biāo)識(shí)符不能包含空格不能以系統(tǒng)保留關(guān)鍵字作為標(biāo)識(shí)符標(biāo)識(shí)符的命名要盡量采取簡(jiǎn)短且有意義的詞不能和標(biāo)準(zhǔn)庫(kù)中的包名重復(fù)1關(guān)鍵字和標(biāo)識(shí)符1關(guān)鍵字和標(biāo)識(shí)符預(yù)定義標(biāo)識(shí)符:自身具有一些特殊含義的標(biāo)識(shí)符。Go語(yǔ)言中的預(yù)定義標(biāo)識(shí)符一共有
37個(gè)。內(nèi)建常量nil、iota、true、false內(nèi)建類型int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、uintprt、float32、float64、complex64、complex128、bool、byte、rune、string、error內(nèi)建函數(shù)append、cap、close、complex、copy、delete、imag、len、make、new、panic、real、recovervarstuIdint//聲明一個(gè)int類型、名為stuId的標(biāo)識(shí)符varstuNamestring=“姓名“//聲明一個(gè)string類型、名為stuName、值為姓名的標(biāo)識(shí)符標(biāo)識(shí)符聲明示例錯(cuò)誤標(biāo)識(shí)符示例0102var1numint//不能以數(shù)字開(kāi)頭varbreakstring//不能以系統(tǒng)保留關(guān)鍵字作為標(biāo)識(shí)符1關(guān)鍵字和標(biāo)識(shí)符02變量和常量變量的定義變量的標(biāo)準(zhǔn)格式聲明變量的批量格式聲明變量的簡(jiǎn)短格式聲明常量的定義常量的顯式定義常量的隱式定義varaint=100x000110變量?jī)?nèi)存varp*int=&a0x00010x0005變量:一種能夠儲(chǔ)存值或者計(jì)算結(jié)果的抽象概念。
是內(nèi)存中的一個(gè)數(shù)據(jù)存儲(chǔ)空間的標(biāo)識(shí),變量可以看做是一個(gè)內(nèi)存地址,通過(guò)內(nèi)存地址,我們可以找到這個(gè)地址所存儲(chǔ)的數(shù)據(jù)。2變量和常量局部變量函數(shù)體內(nèi)聲明的變量稱之為局部變量,作用域只在函數(shù)體內(nèi),函數(shù)的參數(shù)和返回值變量都屬于局部變量。函數(shù)調(diào)用結(jié)束后這個(gè)局部變量就會(huì)被銷毀。全局變量在函數(shù)體外聲明的變量稱之為全局變量,全局變量聲明必須以var關(guān)鍵字開(kāi)頭,如果想要在外部包中使用全局變量的首字母必須大寫。形參變量在定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量叫做形式參數(shù)變量。形式參數(shù)只在函數(shù)調(diào)用時(shí)才會(huì)生效,函數(shù)調(diào)用結(jié)束后就會(huì)被銷毀。2變量和常量2變量和常量關(guān)鍵字var開(kāi)頭,后置變量類型格式:var變量名變量類型標(biāo)準(zhǔn)初始化格式:var變量名變量類型=初始化值變量標(biāo)準(zhǔn)格式聲明示例1:vargoodsNamestring="Go語(yǔ)言“示例2:varstuNamestringstuName=“小明“2變量和常量存放一組變量定義格式:var(a變量類型b變量類型c,d變量類型)變量批量格式聲明示例:var(goodsPricefloat32goodsNum,goodsIdint)goodsId=123goodsNum=5goodsPrice=6.72變量和常量定義在函數(shù)內(nèi)部的顯式初始化,不提供數(shù)據(jù)類型格式:變量名:=變量值變量名1,變量名2:=變量值1,變量值2變量簡(jiǎn)短格式聲明示例1:goodsName:="Go語(yǔ)言“示例2:goodsSize,goodsID:="50kg“,”go0001”2變量和常量常量的數(shù)據(jù)類型布爾型數(shù)字型整數(shù)浮點(diǎn)復(fù)數(shù)字符串型標(biāo)準(zhǔn)定義格式:const常量名[常量類型]=常量值顯式定義格式:const常量名
常量類型=常量值隱式定義格式:const常量名=常量值常量:一種簡(jiǎn)單值的標(biāo)識(shí)符,在程序運(yùn)行時(shí)它的值不會(huì)被改變。2變量和常量packagemainimport"fmt"funcmain(){
constaint=1
constb,c=2,"C" fmt.Println(a) fmt.Println(b) fmt.Println(c)}運(yùn)行結(jié)果為:12Ca是顯式類型定義,即能看到數(shù)值類型。b,c是隱式類型定義。03數(shù)據(jù)類型布爾型(bool)數(shù)字類型字符串類型派生類型3數(shù)據(jù)類型類型解釋布爾型(bool)布爾型的值只可以是常量、true或者false數(shù)字類型整型(int)和浮點(diǎn)型(float32、float64)字符串類型字符串就是一串固定長(zhǎng)度的字符連接起來(lái)的字符序列派生類型指針類型(Pointer)數(shù)組類型結(jié)構(gòu)體類型(struct)Channel類型函數(shù)類型切片類型接口類型(interface)Map類型3數(shù)據(jù)類型數(shù)字類型解釋uint8無(wú)符號(hào)8位整型(0到255)uint16無(wú)符號(hào)16位整型(0到65535)uint32無(wú)符號(hào)32位整型(0到4294967295)uint64無(wú)符號(hào)64位整型(0到18446744073709551615)int8有符號(hào)8位整型(-128到127)int16有符號(hào)16位整型(-32768到32767)int32有符號(hào)32位整型(-2147483648到2147483647)int64有符號(hào)64位整型(-9223372036854775808到9223372036854775807)float32IEEE-75432位浮點(diǎn)型數(shù)float64IEEE-75464位浮點(diǎn)型數(shù)complex6432位實(shí)數(shù)和虛數(shù)complex12864位實(shí)數(shù)和虛數(shù)byte類似uint8rune類似int32uintptr無(wú)符號(hào)整型,用于存放一個(gè)指針3數(shù)據(jù)類型packagemainimport"fmt"funcmain(){varnumintfmt.Println("num=",num)varpai_32float32=3.12345678901234567890varpai_64float64=3.12345678901234567890fmt.Println("pai_32=",pai_32)fmt.Println("pai_64=",pai_64)varnum1complex64=1.2+3ivarnum2=complex(1.2,3)fmt.Printf("num1的數(shù)據(jù)類型是:%T\n",num1)fmt.Printf("num2的數(shù)據(jù)類型是:%T\n",num2)}運(yùn)行結(jié)果為:num=0pai_32=3.1234567pai_64=3.1234567890123457num1的數(shù)據(jù)類型是:complex64num2的數(shù)據(jù)類型是:complex128數(shù)值類型默認(rèn)值為0float32大約可以提供小數(shù)點(diǎn)后6到8位的精度f(wàn)loat64可以提供小數(shù)點(diǎn)后15位的精度Complex64分為32位實(shí)數(shù)和32位虛數(shù)Complex128分為64位實(shí)數(shù)和64位虛數(shù)04運(yùn)算符算術(shù)運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符位運(yùn)算符賦值運(yùn)算符其它運(yùn)算符運(yùn)算符描述實(shí)例實(shí)例結(jié)果+相加1+12-相減1-10*相乘1*11/相除1/21%求余(取模)1%2(1÷2=0……1)1++自增a=1a++(等價(jià)于a=a+1)a=2--自減a=1a—(等價(jià)于a=a-1)a=0+正號(hào)+11-負(fù)號(hào)-1-1+字符串相加(連)"hello"+"World"helloWorld4算數(shù)運(yùn)算符兩個(gè)運(yùn)算數(shù)的類型必須相同并且為基本數(shù)據(jù)類型packagemainimport"fmt"funcmain(){ fmt.Println("1.0/2=",1.0/2)}運(yùn)算結(jié)果為:1.0/2=0.5packagemainimport"fmt"funcmain(){ fmt.Println("1/2=",1/2)}運(yùn)算結(jié)果為:1/2=04算數(shù)運(yùn)算符 varaint=1 varbint a++ //正確 b=(a++) //錯(cuò)誤,因?yàn)樽栽鲎詼p只能當(dāng)作一個(gè)獨(dú)立的語(yǔ)句使用 ++a //錯(cuò)誤,因?yàn)樽栽鲎詼p只能寫在變量的后面自增和自減在Go語(yǔ)言中構(gòu)成單獨(dú)的語(yǔ)句,不是表達(dá)式4算數(shù)運(yùn)算符運(yùn)算符運(yùn)算含義實(shí)例==等于檢查兩個(gè)值是否相等,如果相等返回True否則返回False。(1==1)為True(1==2)為False!=不等于檢查兩個(gè)值是否不相等,如果不相等返回True否則返回False。(1!=2)為True(1!=1)為False>
大于檢查左邊值是否大于右邊值,如果是返回True否則返回False。(1>0)為True(1>2)為False<
小于檢查左邊值是否小于右邊值,如果是返回True否則返回False。(1<2)為True(1<0)為False>=大于等于檢查左邊值是否大于等于右邊值,如果是返回True否則返回False。(1>=1)為True(1>=2)為False<=小于等于檢查左邊值是否小于等于右邊值,如果是返回True否則返回False。(1<=2)為True(1<=0)為False4關(guān)系運(yùn)算符運(yùn)算符描述含義實(shí)例&&邏輯與邏輯AND運(yùn)算符。如果兩邊的操作數(shù)都是True,則條件True,否則為False。(一假為假)varabool=truevarbbool=false(a&&a)為True(a&&b)為False(b&&b)為False||邏輯或邏輯OR運(yùn)算符。如果兩邊的操作數(shù)有一個(gè)True,則條件True,否則為False。(一真為真)varabool=truevarbbool=false(a||a)為True(a||b)為True(b||b)為False!邏輯非邏輯NOT運(yùn)算符。如果條件為True,則邏輯NOT條件False,否則為True。(結(jié)果取反)varabool=truevarbbool=false(!a)為False(!b)為True4邏輯運(yùn)算符運(yùn)算符含義按位與(&)兩位全為1,結(jié)果為1,否則為0。(全1為1)按位或(|)兩位有一個(gè)為1,結(jié)果為1,否則為0。(有1為1)按位異或(^)兩位一個(gè)為0,一個(gè)為1,結(jié)果為1,否則為0。(相同為0,不同為1)pqp&qp|qp^q000000101111110100114位運(yùn)算符運(yùn)算符含義左移(<<)右邊的數(shù)指定移動(dòng)的位數(shù),符號(hào)位不變,低位補(bǔ)0右移(>>)低位溢出,符號(hào)位不變,并用符號(hào)位補(bǔ)溢出的高位4位移運(yùn)算符packagemainfuncmain(){ varaint=1 varbint=2 println("a&b=",a<<b) println("a&b=",a>>b)}運(yùn)行結(jié)果為:a<<b=4a>>b=01的二進(jìn)制為01,左移2位是100,轉(zhuǎn)換成十進(jìn)制為4。1的二進(jìn)制為01,右移2位是00,轉(zhuǎn)換成十進(jìn)制是0。運(yùn)算符描述含義實(shí)例=等于簡(jiǎn)單的賦值運(yùn)算符,將一個(gè)表達(dá)式的值賦給一個(gè)左值c=a+b將a+b表達(dá)式結(jié)果賦值給c+=加等于相加后再賦值a+=b等價(jià)于a=a+b-=減等于相減后再賦值a-=b等價(jià)于a=a-b*=乘等于相乘后再賦值a*=b等價(jià)于a=a*b/=除等于相除后再賦值a/=b等價(jià)于a=a/b%=取模等于求余后再賦值a%=b等價(jià)于a=a%b<<=左移等于左移后賦值a<<=2等價(jià)于a=a<<2>>=右移等于右移后賦值a>>=2等價(jià)價(jià)于a=a>>2&=位于等于按位與后賦值a&=2等價(jià)于a=a&2^=異或等于按位異或后賦值a^=2等價(jià)于a=a^2|=位或等于按位或后賦值a|=2等價(jià)于a=a|24賦值運(yùn)算符運(yùn)算符描述實(shí)例&返回變量存儲(chǔ)地址&a;取出變量的實(shí)際地址*指針變量*a;定義一個(gè)指針變量go不支持三元運(yùn)算符若要實(shí)現(xiàn)三元運(yùn)算,可以使用if-else進(jìn)行實(shí)現(xiàn)4其它運(yùn)算符05字符串拼接5種拼接方式5字符串拼接str=str1+str2str=fmt.Sprintf("%s%d%s",str1,i,str2)“+”sprintf()varstrs[]string=[]string{str1,str2}str:=strings.Join(strs,"")join()//定義字節(jié)緩沖變量btvarbtbytes.Bufferbt.WriteString(str1)bt.WriteString(str2)str:=bt.String()buffer.WriteString()varbuildstrings.Builderbuild.WriteString(str1)build.WriteString(str2)str:=build.String()buffer.Builder()packagemainimport( "bytes" "fmt")funcmain(){ varstr1="a" varstr2="b" varstrA=str1+str2 fmt.Println(strA) varstrB=fmt.Sprintf("%s%d%s",str1,1,str2) fmt.Println(strB) varbtbytes.Buffer bt.WriteString(str1) bt.WriteString(str2) strC:=bt.String() fmt.Println(strC)}運(yùn)算結(jié)果為:aba1bab5字符串拼接06數(shù)據(jù)類型轉(zhuǎn)換數(shù)據(jù)類型轉(zhuǎn)換要求6數(shù)據(jù)類型轉(zhuǎn)換valueOfTypeB=typeB(valueOfTypeA)Go語(yǔ)言所有的類型轉(zhuǎn)換都必須顯式的聲明類型轉(zhuǎn)換只能在定義正確的情況下轉(zhuǎn)換成功,例如從一個(gè)取值范圍較小的類型轉(zhuǎn)換到一個(gè)取值范圍較大的類型(將int16轉(zhuǎn)換為int32)。當(dāng)從一個(gè)取值范圍較大的類型轉(zhuǎn)換到取值范圍較小的類型時(shí)(將int32轉(zhuǎn)換為int16或?qū)loat32轉(zhuǎn)換為int),會(huì)發(fā)生精度丟失(截?cái)啵┑那闆r。只有相同底層類型的變量之間可以進(jìn)行相互轉(zhuǎn)換(如將int16類型轉(zhuǎn)換成int32類型),不同底層類型的變量相互轉(zhuǎn)換時(shí)會(huì)引發(fā)編譯錯(cuò)誤(如將bool類型轉(zhuǎn)換為int類型)定義packagemainimport( "fmt" "reflect" "strconv")funcmain(){ //初始化一個(gè)32位整型值
varaint32=1234567890 fmt.Printf("a的值為:%d,類型為:%s\n",a,reflect.TypeOf(a)) b:=int16(a)//精度丟失
fmt.Printf("b的值為:%d,類型為:%s\n",b,reflect.TypeOf(b)) c:=strconv.Itoa(int(a)) fmt.Printf("c的值為:%s,類型為:%s\n",c,reflect.TypeOf(c))}運(yùn)算結(jié)果為:a的值為:1234567890,類型為:int32b的值為:722,類型為:int16c的值為:1234567890,類型為:string6數(shù)據(jù)類型轉(zhuǎn)換謝謝觀看復(fù)合數(shù)據(jù)類型數(shù)組map映射切片01.03.02.目錄01數(shù)組數(shù)組定義數(shù)組聲明拷貝數(shù)組數(shù)組元素修改1數(shù)組一個(gè)由固定長(zhǎng)度的特定類型元素組成的序列varvariable_name[size]type數(shù)組定義標(biāo)準(zhǔn)格式聲明數(shù)組vara[3]int //聲明一個(gè)數(shù)組名為a、類型為int、大小為3的數(shù)組a[0]=12 //為第一個(gè)元素填充數(shù)據(jù)a[1]=78 //為第二個(gè)元素填充數(shù)據(jù)a[2]=50 //為第三個(gè)元素填充數(shù)據(jù)a:=[3]int{12,78,50} //定義且聲明數(shù)組內(nèi)容a:=[3]int{12} //可以只填充部分?jǐn)?shù)據(jù)varvariable_name=[size]type{value,……}初始化數(shù)組a:=[...]int{12,78,50} //編譯器自行推斷vara=[3]int{12,78,50} //定義且聲明數(shù)組內(nèi)容varvariable_name=[...]type{value,……}自行推斷數(shù)組大小a:=[3]int{1:78,2:50} //填充指定位置1數(shù)組數(shù)組的每個(gè)元素可以通過(guò)索引下標(biāo)來(lái)訪問(wèn)索引下標(biāo)的范圍從0開(kāi)始到數(shù)據(jù)長(zhǎng)度減1結(jié)束數(shù)組無(wú)法靈活擴(kuò)容:在定義數(shù)組元素?cái)?shù)量后,賦值元素變量個(gè)數(shù)必須要小于或者等于預(yù)設(shè)置的元素?cái)?shù)量type指任意的基本類型,也可以是數(shù)組本身,實(shí)現(xiàn)多維數(shù)組在Go語(yǔ)言中數(shù)組是值類型而不是引用類型這意味著當(dāng)數(shù)組變量被賦值時(shí),將會(huì)獲得原數(shù)組的拷貝,新數(shù)組中元素的改變不會(huì)影響原數(shù)組中元素的值數(shù)組特點(diǎn)packagemainimport"fmt"funcmain(){a:=[...]int{12,78,50}b:=a //將a數(shù)組復(fù)制給b數(shù)組
b[0]=60fmt.Println(a)fmt.Println(b)}1數(shù)組在Go中數(shù)組是值類型而不是引用類型。當(dāng)數(shù)組變量被賦值時(shí):將會(huì)獲得原數(shù)組的拷貝。新數(shù)組中元素的改變不會(huì)影響原數(shù)組中元素的值。運(yùn)行結(jié)果為:[127850][607850]packagemainimport"fmt"funcmain(){ vara[1]string//定義一個(gè)1個(gè)元素的string類型數(shù)組,string默認(rèn)值為空
varb=[2]string{“a”,“b”}//定義一個(gè)2個(gè)元素的string類型數(shù)組
c:=[3]string{"a","b","c"}//定義并初始化一個(gè)3個(gè)空間的string類型數(shù)組
d:=[...]string{"a","b","c","d"}//自動(dòng)推到元素個(gè)數(shù)
e:=d//拷貝數(shù)組
e[0]="e"http://修改數(shù)組指定位置的值
fmt.Println(a,len(a))//打印a數(shù)組、a數(shù)組長(zhǎng)度
fmt.Println(b) fmt.Println(c) fmt.Println(d,len(d)) fmt.Println(e,len(e))}1數(shù)組運(yùn)行結(jié)果為:[]1[ab][abc][abcd]4[ebcd]402切片切片聲明基于數(shù)組創(chuàng)建切片使用make()函數(shù)構(gòu)造切片使用append()為切片動(dòng)態(tài)添加元素使用copy()復(fù)制新的切片數(shù)組與切片相互轉(zhuǎn)換2切片動(dòng)態(tài)數(shù)組:切片可以按需自動(dòng)擴(kuò)充和縮減數(shù)組:長(zhǎng)度固定現(xiàn)實(shí)中會(huì)面臨:往數(shù)組內(nèi)增加>len(數(shù)組名)個(gè)元素varname[]type=[]type{……}切片聲明[]中不需要指定長(zhǎng)度,即:長(zhǎng)度是不固定的可以追加元素,在追加時(shí)可能使切片的容量增大,可以從數(shù)據(jù)中生成新的切片或者是聲明新的切片。切片特點(diǎn)packagemainimport"fmt"funcmain(){vara[]int=[]int{10,11,12,13}fmt.Println(a,len(a))}運(yùn)行結(jié)果為:[10111213]42切片varname[]type=數(shù)組名[開(kāi)始位置:結(jié)束位置]基于數(shù)組創(chuàng)建切片特點(diǎn)結(jié)束位置的元素不取切片數(shù)量=結(jié)束位置下標(biāo)-開(kāi)始位置下標(biāo)當(dāng)缺省開(kāi)始位置時(shí),表示從連續(xù)的區(qū)域開(kāi)頭到結(jié)束位置當(dāng)缺省結(jié)束位置時(shí),表示從開(kāi)始位置到整個(gè)連續(xù)區(qū)域末尾兩者同時(shí)缺省時(shí),與數(shù)組本身等效兩者同時(shí)為0時(shí),等于空切片,一般用于切片復(fù)位packagemainimport"fmt"funcmain(){a:=[5]string{"A","B","C","D"}varb[]string=a[1:2]fmt.Println(a)fmt.Println(b,len(b))}運(yùn)行結(jié)果為:[ABCD][B]1packagemainimport"fmt"funcmain(){a:=[5]int{76,77,78,79,80}varb[]int=a[1:3] //取a數(shù)組的第1到第3個(gè)元素varc[]int=a[:3] //取a數(shù)組的第0到第3個(gè)元素vard[]int=a[1:] //取a數(shù)組的第1到最后一個(gè)元素vare[]int=a[:] //取a數(shù)組的第0到最后一個(gè)元素varf[]int=a[0:0] //空切片fmt.Println(a,len(a))fmt.Println(b,len(b))fmt.Println(c,len(c))fmt.Println(d,len(d))fmt.Println(e,len(e))fmt.Println(f,len(f))}運(yùn)行結(jié)果為:[7677787980]5[7778]2[767778]3[77787980]4[7677787980]5[]02切片packagemainimport"fmt"funcmain(){a:=[5]string{"A","B","C","D","E"}varb[]string=a[1:3]fmt.Println("修改前的a數(shù)組:",a)fmt.Println("修改前的b切片:",b)
b[1]="2"fmt.Println("修改后的a數(shù)組:",a)fmt.Println("修改后的b切片:",b)}運(yùn)行結(jié)果為:修改前的a數(shù)組:[ABCDE]修改前的b切片:[BC]修改后的a數(shù)組:[AB2DE]修改后的b切片:[B2]2切片切片本身不包含任何數(shù)據(jù)切片僅僅是底層數(shù)組的一個(gè)上層表示對(duì)切片進(jìn)行的任何修改都將反映在底層數(shù)組中2切片packagemainimport("fmt")funcmain(){a:=[...]string{"A","B","C","D","E"}b:=a[1:3]fmt.Printf("數(shù)組a長(zhǎng)度為:%d\n切片b容量為:%d",len(a),cap(b))}運(yùn)行結(jié)果為:數(shù)組a長(zhǎng)度為:5切片b容量為:4切片的長(zhǎng)度是指切片中元素的個(gè)數(shù)切片的容量是指從切片的起始元素開(kāi)始到其底層數(shù)組中的最后一個(gè)元素的個(gè)數(shù)切片的長(zhǎng)度可以動(dòng)態(tài)的改變(最大為其容量)任何超出最大容量的操作都會(huì)發(fā)生運(yùn)行時(shí)錯(cuò)誤2切片varname[]type=make([]type,size,cap)使用make()函數(shù)構(gòu)造切片特點(diǎn)type指切片元素類型size指的是為這個(gè)類型分配多少個(gè)元素cap為預(yù)分配的元素?cái)?shù)量cap設(shè)定后不會(huì)影響size,只是為了提前分配空間,降低多次分配空間造成的性能問(wèn)題packagemainimport"fmt"funcmain(){vara[]int=make([]int,5,10)//創(chuàng)建一個(gè)切片,初始元素個(gè)數(shù)為5,并預(yù)留10個(gè)元素的存儲(chǔ)空間a[0]=10a[4]=14fmt.Println(a)}運(yùn)行結(jié)果為:[1000014]2切片append(name,value)append(name,[]type[value,value,value]...)使用append()為切片動(dòng)態(tài)添加元素特點(diǎn)可以為切片追加單個(gè)或多個(gè)元素;或者是追加切片使用append()函數(shù)為切片動(dòng)態(tài)添加元素時(shí),如果空間不足以容納足夠多的元素,切片就會(huì)進(jìn)行“擴(kuò)容”,此時(shí)新切片的長(zhǎng)度會(huì)發(fā)生改變。擴(kuò)展容量小于1024個(gè)元素時(shí)按當(dāng)前切片的容量(Cap)2倍擴(kuò)容,擴(kuò)展容量大于1024個(gè)元素時(shí)按Cap的1/4擴(kuò)容。2切片packagemainimport"fmt"funcmain(){a:=[]int{10,20,30,40,50}b:=a[1:3]fmt.Println(a)fmt.Println(b)b=append(b,60)fmt.Printf(“第一次追加后,切片a為:%d切片a容量為:%d\n",a,cap(a))fmt.Printf(“第一次追加后,切片b為:%d切片b容量為:%d\n",b,cap(b))b=append(b,70,80,90,100)fmt.Printf(“第二次追加后,切片a為:%d切片a容量為:%d\n",a,cap(a))fmt.Printf(“第二次追加后,切片b為:%d切片b容量為:%d\n",b,cap(b))}運(yùn)行結(jié)果為:[1020304050][2030]第一次追加后,切片a為:[1020306050]切片a容量為:5第一次追加后,切片b為:[203060]切片b容量為:4第二次追加后,切片a為:[1020306050]切片a容量為:5第二次追加后,切片b為:[203060708090100]切片b容量為:82切片copy(destSlice,srcSlice)使用copy()復(fù)制新的切片特點(diǎn)destSlice為復(fù)制的目標(biāo)切片srcSlice為數(shù)據(jù)來(lái)源切片目標(biāo)切片必須分配過(guò)空間且足夠承載復(fù)制的元素個(gè)數(shù),并且來(lái)源和目標(biāo)的類型必須一致。copy()函數(shù)來(lái)源切片和目標(biāo)切片可以共享同一個(gè)底層數(shù)組,甚至有重疊也沒(méi)有問(wèn)題。packagemainimport"fmt"funcmain(){a:=[]int{0,1,2,3,4,5}b:=[]int{10,11,12}fmt.Println(a)fmt.Println(b)copy(b,a)//只會(huì)復(fù)制a的前3個(gè)元素到b中
fmt.Println(a)fmt.Println(b)}運(yùn)行結(jié)果為:[012345][101112][012345][012]2切片packagemainimport"fmt"funcmain(){//切片轉(zhuǎn)成數(shù)組
s:=[]int{10,11,12}vara[3]intfmt.Println(copy(a[:],s))fmt.Println(a)}運(yùn)行結(jié)果為:3[101112]packagemainimport"fmt"funcmain(){//數(shù)組轉(zhuǎn)成切片
a:=[...]int{10,11,12}b:=make([]int,3)fmt.Println(copy(b,a[:]))fmt.Println(b)}運(yùn)行結(jié)果為:3[101112]數(shù)組與切片相互轉(zhuǎn)換時(shí):需要使用[:]將數(shù)組偽裝為切片類型后再進(jìn)行賦值,否則無(wú)法通過(guò)編譯數(shù)組與切片中的元素類型必須相同03map映射map定義使用make()函數(shù)創(chuàng)建map用切片作為map的值使用delete()函數(shù)刪除元素3map映射一種無(wú)序的key/value的集合;能夠通過(guò)key值快速檢索數(shù)據(jù)值。map這種數(shù)據(jù)結(jié)構(gòu)在其他編程語(yǔ)言中也稱為字典、映射或哈希表。Golang的map由兩種重要的結(jié)構(gòu)構(gòu)成:hmap和bmap。map定義聲明map集合varnamemap[key_type]value_type語(yǔ)法說(shuō)明如下:(a).name為map變量名;(b).key_type為鍵類型;(c).value_type為鍵對(duì)應(yīng)值類型。packagemainimport"fmt"funcmain(){a:=map[int]string{110:"報(bào)警電話",120:"急救電話",119:"消防電話"}fmt.Println(a)}運(yùn)行結(jié)果為:map[110:報(bào)警電話119:消防電話120:急救電話]3map映射make(map[KeyType]ValueType,[cap])使用make()函數(shù)創(chuàng)建map特點(diǎn)map可以在聲明的時(shí)候填充元素,也可以單獨(dú)填充元素map中的數(shù)據(jù)都是成對(duì)出現(xiàn)的map類型的變量默認(rèn)初始值為nil其中cap表示map的容量,該參數(shù)雖然不是必須的,但是我們應(yīng)該在初始化map的時(shí)候就為其指定一個(gè)合適的容量。packagemainimport"fmt"funcmain(){a:=make(map[string]int,10)a["報(bào)警電話"]=110;a["急救電話"]=120;a["火警電話"]=119;fmt.Println(a)}運(yùn)行結(jié)果為:map[急救電話:120報(bào)警電話:110火警電話:119]3map映射運(yùn)行結(jié)果為:[map[A:1a:2]map[]]packagemainimport"fmt"funcmain(){//map的值為切片:
a:=make(map[int][]string,2)a[1]=make([]string,0,2)a[1]=append(a[1],"A","a")fmt.Println(a)}packagemainimport"fmt"funcmain(){//切片的元素類型為map:
b:=make([]map[string]int,2)b[0]=make(map[string]int,2)b[0]["A"]=1b[0]["a"]=2fmt.Println(b)}運(yùn)行結(jié)果為:map[1:[Aa]]3map映射delete(map,key)使用delete()函數(shù)刪除元素特點(diǎn)如果要?jiǎng)h除的key不存在,那么這個(gè)調(diào)用將什么都不發(fā)生,也不會(huì)有什么副作用但是如果傳入的map變量的值是nil,該調(diào)用將導(dǎo)致程序拋出異常(panic)packagemainimport"fmt"funcmain(){a:=map[int]string{110:"報(bào)警電話",120:"急救電話",119:"消防電話"}delete(a,110)fmt.Println(a)}運(yùn)行結(jié)果為:map[119:消防電話120:急救電話]謝謝觀看流程控制if分支結(jié)構(gòu)語(yǔ)句switch語(yǔ)句01.02.目錄01if分支結(jié)構(gòu)語(yǔ)句單分支雙分支多分支注意事項(xiàng)1if分支結(jié)構(gòu)語(yǔ)句條件語(yǔ)句:根據(jù)是否滿足條件,有選擇地跳轉(zhuǎn)到相應(yīng)的執(zhí)行序列。if語(yǔ)句單分支雙分支多分支if分支結(jié)構(gòu)語(yǔ)句一般會(huì)由關(guān)鍵字if、條件表達(dá)式和由花括號(hào)包裹的代碼塊組成。其中代碼塊為:包含了若干表達(dá)式和語(yǔ)句的序列。在Go語(yǔ)言中,代碼塊必須由花括號(hào)包裹。多分支if<condition>{<Executestatement>}elseif<condition>{<Executestatement>}else{<Executestatement>}雙分支if<condition>{<Executestatement>}else{<Executestatement>}單分支if<condition>{<Executestatement>}1if分支結(jié)構(gòu)語(yǔ)句packagemainimport"fmt"funcmain(){vara=1varb=2//如果if語(yǔ)句條件為真,則會(huì)執(zhí)行相對(duì)應(yīng)的代碼ifa<=b{fmt.Println("a<=b")}else{fmt.Println("a>b")}}運(yùn)行結(jié)果為:a<=bif語(yǔ)句的條件判斷表達(dá)式不需要也不能加小括號(hào),即
(),這是Go語(yǔ)言與其他語(yǔ)言if語(yǔ)句的區(qū)別。if語(yǔ)句后面的大括號(hào)必須跟條件表達(dá)式寫在一行,不能換行寫,換行寫會(huì)導(dǎo)致編譯錯(cuò)誤。1if分支結(jié)構(gòu)語(yǔ)句packagemainimport"fmt"funcmain(){
vara=10varb=20//如果if語(yǔ)句條件為真,則不會(huì)執(zhí)行elseif相對(duì)應(yīng)的代碼ifa>5{fmt.Println("a>5")}elseifa<b{fmt.Println("a<b")}}運(yùn)行結(jié)果為:a>5if語(yǔ)句與elseif語(yǔ)句是互斥的執(zhí)行因?yàn)閕f語(yǔ)句已經(jīng)成立了,所以elseif里面的語(yǔ)句未能執(zhí)行。1if分支結(jié)構(gòu)語(yǔ)句packagemainimport"fmt"funcmain(){vara=11varb=5ifa>20{fmt.Println("a>20")}elseifa>15{fmt.Println("a>15")}elseifa>10{fmt.Println("a>10")}elseifa>b{fmt.Println("a>b")}}運(yùn)行結(jié)果為:a>10多個(gè)elseif語(yǔ)句,會(huì)被依次判斷,直到其中一個(gè)滿足條件的被執(zhí)行1if分支結(jié)構(gòu)語(yǔ)句packagemainimport"fmt"funcmain(){vara=10ifa>5{ifa>20{fmt.Println("a>20")}elseifa>10{fmt.Println("a>10")}else{fmt.Println("a>5")}}else{fmt.Println("a<=5")}}運(yùn)行結(jié)果為:a>5if語(yǔ)句里面可以嵌套多層的if、elseif以及else1if分支結(jié)構(gòu)語(yǔ)句if分支結(jié)構(gòu)語(yǔ)句使用注意事項(xiàng)條件語(yǔ)句不需要使用括號(hào)()將條件包含無(wú)論語(yǔ)句體內(nèi)有幾條語(yǔ)句,花括號(hào){}都是必須存在的左花括號(hào){必須與if或者else處于同一行在if之后,條件語(yǔ)句之前,可以添加變量初始化語(yǔ)句,使用;間隔在有返回值的函數(shù)中,不允許將“最終的”return語(yǔ)句包含在if...else...結(jié)構(gòu)中,否則會(huì)編譯失敗1if分支結(jié)構(gòu)語(yǔ)句02Switch選擇語(yǔ)句有表達(dá)式無(wú)表達(dá)式2Switch選擇語(yǔ)句Switch選擇語(yǔ)句:根據(jù)不同條件來(lái)執(zhí)行不同動(dòng)作,每一個(gè)條件對(duì)應(yīng)一個(gè)case分支。switch語(yǔ)句有表達(dá)式無(wú)表達(dá)式switch語(yǔ)句的執(zhí)行過(guò)程從上至下,直到找到匹配項(xiàng)匹配項(xiàng)后不需要再加break每一個(gè)switch語(yǔ)句只能包含一個(gè)可選的default分支,若沒(méi)有找到匹配項(xiàng),會(huì)默認(rèn)執(zhí)行default分支中的代碼塊switch表達(dá)式{//case后的條件可以是多個(gè)值casevalue1,value2:<Executestatement>1casevalue3:<Executestatement>2//若以上條件都不滿足,則執(zhí)行下面的語(yǔ)句default:
<Executestatement>n}有表達(dá)式switch{case<condition>1:<Executestatement>1case<condition>2:<Executestatement>2//若以上條件都不滿足,則執(zhí)行下面的語(yǔ)句default: <Executestatement>n}無(wú)表達(dá)式2Switch選擇語(yǔ)句2Switch選擇語(yǔ)句packagemainimport"fmt"funcmain(){score:=80switchscore{case90:fmt.Println("A")case80:fmt.Println("B")case70:fmt.Println("C")default:fmt.Println("D")}}運(yùn)行結(jié)果為:B首先定義整數(shù)變量
score接著使用switch語(yǔ)句判斷score如果是90,則打印A如果是80,則打印B如果是70,則打印C其他情況,則打印D2Switch選擇語(yǔ)句packagemainimport"fmt"funcmain(){score:=80ifscore==90{fmt.Println("A")}elseifscore==80{fmt.Println("B")}elseifscore==70{fmt.Println("C")}else{fmt.Println("D")}}運(yùn)行結(jié)果為:B將上述代碼改成if-else寫法如果是90,則打印A如果是80,則打印B如果是70,則打印C其他情況,則打印D2Switch選擇語(yǔ)句packagemainimport"fmt"funcmain(){switchscore:=80;score{case90:fmt.Println("A")case80:fmt.Println("B")case70:fmt.Println("C")default:fmt.Println("D")}}運(yùn)行結(jié)果為:B可以在判斷條件前面定義變量用;號(hào)分割2Switch選擇語(yǔ)句packagemainimport"fmt"funcmain(){score:=66switch{casescore>90:fmt.Println("A")casescore>80:fmt.Println("B")casescore>70,score>60://可以放多個(gè)條件
fmt.Println("C")default:fmt.Println("D")}}運(yùn)行結(jié)果為:Cswitch后面可以沒(méi)有條件表達(dá),將條件放在case的后面,也可以放多個(gè)條件,但每個(gè)case后面的條件不能重復(fù)。2Switch選擇語(yǔ)句packagemainimport"fmt"funcmain(){switchscore:=80;score{case90:fmt.Println("A")case80:fmt.Println("B")fallthrough//強(qiáng)制執(zhí)行下一case后面的代碼case70:fmt.Println("C")default:fmt.Println("D")}}運(yùn)行結(jié)果為:BCswitch語(yǔ)句支持使用fallthrough關(guān)鍵字強(qiáng)制執(zhí)行下一case里面的代碼2Switch選擇語(yǔ)句switch語(yǔ)句還可以被用于type-switch來(lái)判斷某個(gè)interface變量中實(shí)際存儲(chǔ)的變量類型TypeSwitchswitchx.(type){/*定義任意個(gè)數(shù)的case*/casetype1:statement(s)casetype2:statement(s)/*可選*/default: statement(s)}語(yǔ)法格式2Switch選擇語(yǔ)句packagemainimport"fmt"funcmain(){varxinterface{}switchi:=x.(type){
casenil:fmt.Printf("x的類型:%T\r\n",i)caseint:fmt.Printf("x是int型")casefloat64:fmt.Printf("x是float64型")casefunc(int)float64:fmt.Printf("x是func(int)型")casebool,string:fmt.Printf("x是bool或string型")default:fmt.Printf("未知類型")}}運(yùn)行結(jié)果為:x的類型:<nil>通過(guò)switch語(yǔ)句判斷類型2Switch選擇語(yǔ)句Switch選擇語(yǔ)句注意事項(xiàng)switch/case后是一個(gè)表達(dá)式(即:常量,變量,一個(gè)有返回的函數(shù)都可以);case后的各個(gè)表達(dá)式的值的數(shù)據(jù)類型,必須和switch的表達(dá)式數(shù)據(jù)類型一致;case后面可以帶多個(gè)表達(dá)式,使用逗號(hào)間隔;case后面的表達(dá)式如果是常量值,則要求不能重復(fù);case后面不需要帶break,程序匹配到一個(gè)case后就會(huì)執(zhí)行對(duì)應(yīng)的代碼塊,然后退出switch,如果一個(gè)都匹配不到,則執(zhí)行default;default語(yǔ)句不是必須的;switch后也可以不帶表達(dá)式,類似if--else分支來(lái)使用;switch后也可以直接聲明一個(gè)變量,分號(hào)結(jié)束,不過(guò)不推薦;switch穿透:如果在case語(yǔ)句增加fallthrough,則會(huì)繼續(xù)執(zhí)行下一個(gè)case,默認(rèn)只穿透一層;type-switch:來(lái)判斷interface變量中實(shí)際指向的變量類型。謝謝觀看循環(huán)控制for循環(huán)break語(yǔ)句01.02.目錄03.continue語(yǔ)句04.goto跳出循環(huán)01for循環(huán)for循環(huán)語(yǔ)法幾種循環(huán)方式for和rangeGo語(yǔ)言中的循環(huán)邏輯通過(guò)for關(guān)鍵字實(shí)現(xiàn)Go語(yǔ)言沒(méi)有while關(guān)鍵字,不存在while循環(huán)for循環(huán)可以執(zhí)行指定循環(huán)次數(shù),從而讓程序多次執(zhí)行相同的代碼塊for循環(huán)用的最多的地方是:遍歷數(shù)組或切片等Go語(yǔ)言中的循環(huán)for循環(huán)三種方式常見(jiàn)的for循環(huán),在指定條件下運(yùn)行,支持初始化語(yǔ)句條件表達(dá)式控制循環(huán):當(dāng)滿足條件時(shí)會(huì)進(jìn)入循環(huán)。進(jìn)入循環(huán)后,當(dāng)條件不滿足時(shí)會(huì)跳出循環(huán)。無(wú)限循環(huán):不斷的執(zhí)行程序,也稱作死循環(huán),通常會(huì)配合break關(guān)鍵字進(jìn)行使用。1for循環(huán)語(yǔ)法詳解forinit;condition;post{expression}for循環(huán)語(yǔ)法init:一般為賦值表達(dá)式,給控制變量賦初值condition:關(guān)系表達(dá)式或邏輯表達(dá)式,循環(huán)控制條件post:一般為賦值表達(dá)式,給控制變量增量或減量判別賦值表達(dá)式init是否滿足給定condition條件,若其值為真,滿足循環(huán)條件,則執(zhí)行循環(huán)體內(nèi)語(yǔ)句,然后執(zhí)行post,進(jìn)入第二次循環(huán),再判別condition;否則判斷condition的值為假,不滿足條件,就終止for循環(huán),執(zhí)行循環(huán)體外語(yǔ)句1for循環(huán)packagemainimport"fmt"funcmain(){/*for初始化條件;判斷條件;條件變化{ 1+2+…+100累加
}*/sum:=0fori:=1;i<=100;i++{sum+=i}fmt.Println("sum=",sum)}運(yùn)行結(jié)果為:sum=50501for循環(huán)packagemainfuncmain(){s:="abc"fori,n:=0,len(s);i<n;i++{println(s[i])}}運(yùn)行結(jié)果為:979899packagemainimport"fmt"funcmain(){s:="abc"n:=len(s)forn>0{fmt.Println(s[n-1])n--}}運(yùn)行結(jié)果為:9998971for循環(huán)packagemainimport"fmt"funcmain(){s:="abc"for{fmt.Println(s)}}運(yùn)行結(jié)果為:abcabcpackagemainfunclength(sstring)int{println("calllength.")returnlen(s)}funcmain(){s:="abcd"fori,n:=0,length(s);i<n;i++{println(i,s[i])}}運(yùn)行結(jié)果為:calllength.09719829931001for循環(huán)for[conditio
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 拓展訓(xùn)練心得體會(huì)范文
- 護(hù)士副高個(gè)人工作總結(jié)范文(7篇)
- 技術(shù)方案匯編7篇
- 2024年招商引資居間合同范本與法律法規(guī)解讀3篇
- 早教親子食育課程設(shè)計(jì)
- 2025年山東淄博市淄川區(qū)事業(yè)單位緊缺人才招聘50人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東德州德城區(qū)引進(jìn)專業(yè)自然資源人才4人管理單位筆試遴選500模擬題附帶答案詳解
- 護(hù)士的表?yè)P(yáng)信
- 幼兒專家講座主持詞
- 演練方案4篇資料
- 法學(xué)概論(第七版) 課件全套 谷春德 第1-7章 我國(guó)社會(huì)主義法的基本理論 - 國(guó)際法
- MOOC 模擬電子技術(shù)基礎(chǔ)-華中科技大學(xué) 中國(guó)大學(xué)慕課答案
- 中考語(yǔ)文-排序題(30題含答案)-閱讀理解及答案
- (2024年)特種設(shè)備安全法律法規(guī)培訓(xùn)課件
- (高清版)TDT 1013-2013 土地整治項(xiàng)目驗(yàn)收規(guī)程
- 2024年車輛鉗工(技師)考試復(fù)習(xí)題庫(kù)(含答案)
- 《國(guó)際貿(mào)易單證實(shí)務(wù)》課件-項(xiàng)目四 繕制海運(yùn)提單
- 第9章 解不等式與不等式組100題(基礎(chǔ)篇)
- 高分子材料在能源存儲(chǔ)中的應(yīng)用
- 國(guó)內(nèi)外研究現(xiàn)狀及發(fā)展趨勢(shì)(含文獻(xiàn)綜述)
- 西晉的短暫統(tǒng)一和北方各族的內(nèi)遷 一等獎(jiǎng)
評(píng)論
0/150
提交評(píng)論