




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
函數(shù)的使用訪問權(quán)限閉包匿名函數(shù)多返回值函數(shù)01.03.02.04.目錄包管理05.01訪問權(quán)限Go語言訪問權(quán)限Go語言沒有像其它語言一樣有public、protected、private等訪問控制修飾符Go語言通過字母大小寫來控制可見性的如果定義的常量、變量、類型、接口、結(jié)構(gòu)、函數(shù)等的名稱是:大寫字母開頭表示能被其它包訪問或調(diào)用(相當(dāng)于public),非大寫開頭就只能在包內(nèi)使用(相當(dāng)于private,變量或常量也可以下劃線開頭)1訪問權(quán)限各包之間訪問權(quán)限以小寫開頭,則只在當(dāng)前包中可見,可在當(dāng)前包中直接使用以大寫開頭,則是公共實體,在其它包中可見,可導(dǎo)入使用1訪問權(quán)限packagemycomimport"fmt"funcIsBlank(strstring)bool{returnisEmpty(str)}funcisEmpty(strstring)bool{iflen(str)>0{returntrue}returnfalse}“Public”函數(shù)-要大寫字母開頭。若以小寫字母開頭,同包可以訪問,其他包不能訪問。02匿名函數(shù)匿名函數(shù)概念匿名函數(shù)定義格式2匿名函數(shù)Go語言支持匿名函數(shù),在Go中也被稱作函數(shù)字面量Go語言支持隨時在代碼里定義匿名函數(shù);可以在需要使用函數(shù)時再定義函數(shù);函數(shù)可以作為一種類型被賦值給函數(shù)類型的變量,匿名函數(shù)也往往以變量方式傳遞;Go語言中的匿名函數(shù)是指不需要定義函數(shù)名的一種函數(shù)實現(xiàn)方式,由一個不帶函數(shù)名的函數(shù)聲明和函數(shù)體組成。匿名函數(shù)的特點func(參數(shù)列表)(返回參數(shù)列表){
函數(shù)體}(實參)匿名函數(shù)的定義2匿名函數(shù)packagemainimport( "fmt")funcmain(){ //定義并調(diào)用Go語言的匿名函數(shù)
func(){ fmt.Println("HelloHaiCoder") }()}我們定義了一個匿名函數(shù),并且在該匿名函數(shù)的最后使用()的形式來調(diào)用該匿名函數(shù),結(jié)果輸出了匿名函數(shù)的函數(shù)體內(nèi)容。如果該匿名函數(shù)最后不加(),那么該匿名函數(shù)就不會被執(zhí)行。運算結(jié)果為:HelloHaiCoder2匿名函數(shù)packagemainimport( "fmt")funcmain(){ //定義并調(diào)用帶參數(shù)的匿名函數(shù)
func(num1,num2int){ fmt.Println(num1,"+",num2,"=",num1+num2) }(10,20)}我們定義了一個帶兩個int類型參數(shù)的匿名函數(shù),并且在該匿名函數(shù)的最后使用()的形式來調(diào)用該匿名函數(shù),在()里面我們傳入了10和20,即10和20是這個匿名函數(shù)的參數(shù),結(jié)果輸出了這兩個參數(shù)的和。運算結(jié)果為:10+20=302匿名函數(shù)匿名函數(shù)使用總結(jié)定義并同時調(diào)用匿名函數(shù),在定義匿名函數(shù)時,可以通過在匿名函數(shù)后添加“()”的方式直接傳入實參。將匿名函數(shù)賦值給函數(shù)變量,就可以通過調(diào)用函數(shù)變量來使用匿名函數(shù)。2匿名函數(shù)funcwalk(lis[]int,callbackfunc(int)){}匿名函數(shù)作為參數(shù)packagemainimport"fmt"funcwalk(lis[]int,callbackfunc(int)){for_,i:=rangelis{callback(i)}}funcmain(){slice:=[]int{1,2,3,4}walk(slice,func(iint){fmt.Println("Num=",i)})}運算結(jié)果為:Num=1Num=2Num=3Num=4匿名函數(shù)作為參數(shù)案例我們定義了一個帶兩個參數(shù)的函數(shù)walk,第一個參數(shù)是一個int切片,第二個參數(shù)是一個帶int類型參數(shù)的匿名函數(shù)callback;該函數(shù)的功能是使用
for循環(huán)
遍歷切片里的每一個數(shù),并調(diào)用callback。packagemainimport"fmt"funcprint(numint){fmt.Println("Num=",num)}funcwalk(lis[]int,callbackfunc(int)){for_,i:=rangelis{callback(i)}}funcmain(){slice:=[]int{1,2,3,4}walk(slice,print)}運算結(jié)果為:Num=1Num=2Num=3Num=4Go語言中也可以先定義出函數(shù),再將函數(shù)作為參數(shù)2匿名函數(shù)03閉包閉包形成環(huán)境函數(shù)本身不存儲任何信息,只有與引用環(huán)境結(jié)合后形成的閉包才具有“記憶性”函數(shù)是編譯期靜態(tài)的概念,而閉包是運行期動態(tài)的概念閉包(Closure)在某些編程語言中也被稱為Lambda表達(dá)式閉包的作用函數(shù)+引用環(huán)境=閉包閉包是一種特殊匿名函數(shù)閉包是指引用了自由變量的函數(shù),被引用的自由變量和函數(shù)一同存在即使已經(jīng)離開了自由變量的環(huán)境也不會被釋放或者刪除,在閉包中可以繼續(xù)使用這個自由變量閉包的特性3閉包3閉包packagemainimport"fmt"funcmain(){f:=demo()fmt.Println(f())fmt.Println(f())fmt.Println(f())fmt.Println(f())}funcdemo()func()int{varxintreturnfunc()int{x++returnx*x}}fmt.Println(f())表示為在打印時調(diào)用f()函數(shù),
在demo()函數(shù)中給與賦值,多層嵌套形成閉包環(huán)境。運行結(jié)果為:1491604多返回值函數(shù)同一種類型返回值帶有變量名的返回值在Go語言中定義函數(shù)格式時,會存在返回值參數(shù)及類型Go語言中函數(shù)可以不返回任何值Go語言中函數(shù)可以返回一個或者多個值,即在定義返回參數(shù)時可以定義多個,類型也可以是多個,多返回值能方便地獲得函數(shù)執(zhí)行后的多個返回參數(shù)4多返回值函數(shù)多返回值定義同一種類型返回值帶有變量名的返回值用括號將多個返回值類型括起來用逗號分隔每個返回值的類型使用return語句返回時,值列表的順序需要與函數(shù)聲明的返回值類型一致同一種類型返回值funcfuncName(param1,param2paramType1,...)(returnValue1,returnValue2,...Type){ //執(zhí)行語句... return返回值列表}同一種類型返回值定義4多返回值函數(shù)Go語言中還支持對于返回值進(jìn)行命名,即返回值就和參數(shù)擁有相同的參數(shù)變量名稱和類型對于擁有命名的返回值變量的默認(rèn)值為該類型的默認(rèn)值,即數(shù)值為0,字符串為空字符串,布爾為false,指針為nil等。帶有變量名的返回值func函數(shù)名(參數(shù)列表)(返回值名稱1類型1,返回值名稱2類型2){return}帶有變量名的返回值定義4多返回值函數(shù)packagemainimport("fmt""math")funcgetPageCount(pageSizeint)(isOkbool,pageCountint){ifpageSize<=0{return}pageCount=int(math.Ceil(float64(100/pageSize)))isOk=truereturn}funcmain(){ifisOk,pageCount:=getPageCount(10);!isOk{fmt.Println("Error")}else{fmt.Println("Ok,PageCount=",pageCount)}}運行結(jié)果為:Ok,PageCount=10我們定義了一個函數(shù)getPageCount,傳入一個int類型的參數(shù)pageSize,函數(shù)返回一個bool類型的變量表示函數(shù)是否執(zhí)行成功,和一個int類型的變量表示最終有多少頁數(shù)據(jù)。4多返回值函數(shù)packagemainimport"fmt"funccalcute(aint,bint)(int,int){ ifa==0&&b==0{ return0,0 }else{ returna*b,a+b }}funcmain(){ fmt.Println(calcute(11,12))}返回值類型有兩個,return后面跟了兩個返回值。運行結(jié)果為:132234多返回值函數(shù)05包管理GOPATHGOROOT包包引用5包管理GOPATHGo中不存在文件概念,只有目錄結(jié)構(gòu)包Go語言中通過包的概念交互代碼GOROOTGo的目錄結(jié)構(gòu)包引用Go語言中通過包引用控制訪問關(guān)系在Go語言中是不存在文件的概念的,通過目錄結(jié)構(gòu)來體現(xiàn)項目工程的結(jié)構(gòu)關(guān)系Go代碼可以放在GOPATH工作區(qū)中Go中所有操作基本都是圍繞GOPATH來進(jìn)行的,即GOPATH必須要設(shè)置,但并不是固定不變的GOPATH的目的是為了告知Go需要代碼的時候去哪里查找,這里的代碼包括本項目和外部項目的代碼。其中工作區(qū)類似于目錄,這個目錄包含三個子目錄:src目錄、pkg目錄和bin目錄GOPATH5包管理5包管理目錄src用于包含所有的源代碼,是Go命令行工具一個強(qiáng)制的規(guī)則pkg和bin則無須手動創(chuàng)建,必要時Go命令行工具在構(gòu)建過程中會自動創(chuàng)建GOPATHsrc目錄用于以代碼包的形式組織并保存Go源碼文件(如:go\.c\.h\.s等)是Go編譯時查找代碼的地方pkg目錄用于存放經(jīng)由goget/install命令構(gòu)建安裝后的代碼包的“.a”歸檔文件(分類),是編譯生成的lib文件存儲的地方bin目錄與pkg目錄類似,在通過goget/install命令完成安裝后,保存由Go命令源碼文件生成的可執(zhí)行文件是Go語言的程序安裝目錄目的是告知Go當(dāng)前的安裝位置GOROOT5包管理Go語言的包借助了目錄樹的組織形式一般包的名稱就是其源文件所在目錄的名稱雖然Go語言沒有強(qiáng)制要求包名必須和其所在的目錄名同名,但還是建議包名和所在目錄同名,這樣結(jié)構(gòu)更清晰同一個目錄下的同級的所有g(shù)o文件應(yīng)該屬于一個包包5包管理包名一般是小寫的,使用一個簡短且有意義的名稱包名一般要和所在的目錄同名,也可以不同,包名中不能包含-
等特殊符號包一般使用域名作為目錄名稱,這樣能保證包名的唯一性,比如GitHub項目的包一般會放到GOPATH/src//userName/projectName
目錄下包名為main的包為應(yīng)用程序的入口包,編譯不包含main包的源碼文件時不會得到可執(zhí)行文件一個文件夾下的所有源碼文件只能屬于同一個包,同樣屬于同一個包的源碼文件不能放在多個文件夾下包的習(xí)慣用法5包管理importfmt包的標(biāo)準(zhǔn)引用5包管理importformat_gofmt包的設(shè)置別名引用import.fmt包的省略方式引用import_fmt僅執(zhí)行包的初始化函數(shù)import"package1"import"package2"單行導(dǎo)入import("package01""package02")多行導(dǎo)入5包管理注意事項import導(dǎo)入語句通常放在源碼文件開頭包聲明語句的下面若包是Go語言標(biāo)準(zhǔn)庫包,也就是本地包,可以直接調(diào)用,如果是遠(yuǎn)程服務(wù)器的包或者第三方接口的包,則需要import加具體路徑,在導(dǎo)入之前還需要通過goget命令下載遠(yuǎn)程包導(dǎo)入的包名需要使用雙引號包裹起來包名是從GOPATH/src/后開始計算的,使用/進(jìn)行路徑分隔5包管理GoM
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)購房轉(zhuǎn)讓合同范本
- 個人轉(zhuǎn)讓德文合同范本
- 分包混凝土合同范本
- 買賣車位轉(zhuǎn)讓合同范本
- 包子工用工合同范本
- 創(chuàng)業(yè)加盟合同范本
- 廣西買房合同范本
- 出國勞務(wù)外派合同范本
- 勞動合同范本工資
- 出租包車合同范本
- 2022-2023學(xué)年湖南省長沙市統(tǒng)招專升本語文模擬練習(xí)題三及答案
- 社會救助法課件
- 1.裝配式建筑概述(裝配式混凝土結(jié)構(gòu)施工技術(shù))
- 第七講+漢字字音
- 新零件的成熟保障MLA
- 【基于杜邦分析法的企業(yè)盈利能力研究國內(nèi)外文獻(xiàn)綜述4000字】
- 初中語文七下-上下句默寫
- 《董存瑞舍身炸碉堡》PPT課件新
- 新川教版信息技術(shù)六年級下冊全冊教案
- 第20章補(bǔ)充芯片粘接技術(shù)
- 旅行社運營實務(wù)電子課件 5.1 旅行社電子商務(wù)概念
評論
0/150
提交評論