61396-Go語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程(微課版)4.4 接口與結(jié)構(gòu)體_第1頁(yè)
61396-Go語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程(微課版)4.4 接口與結(jié)構(gòu)體_第2頁(yè)
61396-Go語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程(微課版)4.4 接口與結(jié)構(gòu)體_第3頁(yè)
61396-Go語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程(微課版)4.4 接口與結(jié)構(gòu)體_第4頁(yè)
61396-Go語(yǔ)言程序設(shè)計(jì)項(xiàng)目化教程(微課版)4.4 接口與結(jié)構(gòu)體_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

接口與結(jié)構(gòu)體接口聲明接口的嵌套接口與結(jié)構(gòu)體01.03.02.目錄類型斷言04.01接口聲明接口定義接口特點(diǎn)接口格式空接口error接口接口是對(duì)類型行為的約定接口是一系列方法的集合接口是一種高度抽象的數(shù)據(jù)類型接口中的方法不包含代碼接口中的方法是抽象的接口中不包含變量本質(zhì)是一種關(guān)于對(duì)象功能的約定接口的定義接口是雙方約定的一種合作協(xié)議,接口實(shí)現(xiàn)者不需要關(guān)心接口會(huì)怎樣被使用,只需要實(shí)現(xiàn)接口里面所有的方法即可接口不支持直接實(shí)例化,只能通過具體的類來(lái)實(shí)現(xiàn)聲明的所有方法,同時(shí)函數(shù)的函數(shù)名、函數(shù)參數(shù)和函數(shù)返回值必須完全一樣Go語(yǔ)言中的接口支持賦值操作,從而快速實(shí)現(xiàn)接口與實(shí)現(xiàn)類的映射接口的特點(diǎn)1接口聲明type接口類型名interface{

方法名1(參數(shù)列表1)返回值列表1

方法名2(參數(shù)列表2)返回值列表2......}標(biāo)準(zhǔn)格式聲明接口接口類型名:使用type將接口定義為自定義的類型名,接口在命名時(shí),一般會(huì)在單詞后面添加er;方法名:當(dāng)方法名首字母是大寫時(shí),同時(shí)接口類型名首字母也是大寫時(shí),這個(gè)方法可以被接口所在的包(package)之外的代碼訪問;參數(shù)列表:表示傳入到方法中的值;返回值列表:方法返回值。typePhoneinterface{call()SendMsg(msgstring)bool}語(yǔ)法要點(diǎn)1接口聲明type接口類型名interface{

方法名1(參數(shù)列表1)返回值列表1

方法名2(參數(shù)列表2)返回值列表2......}type(變量名類型)方法名1(參數(shù)列表1)返回值列表1{}type(變量名類型)方法名2(參數(shù)列表2)返回值列表2{}標(biāo)準(zhǔn)格式接口的實(shí)現(xiàn)//標(biāo)準(zhǔn)格式接口的實(shí)現(xiàn)案列typeAndroidPhonestruct{}

func(aAndroidPhone)call(){fmt.Println("AndroidPhonecalling")}

func(aAndroidPhone)SendMsg(msgstring)bool{fmt.Println("AndroidPhonesendingmsg")returntrue}1接口聲明是接口類型的特殊形式空接口沒有任何方法,因此任何類型都無(wú)須實(shí)現(xiàn)空接口從實(shí)現(xiàn)的角度看,任何值都滿足這個(gè)接口的需求空接口類型可以保存任何值,也可以從空接口中取出原值空接口packagemainimport"fmt"funcmain(){varanyinterface{}any=1fmt.Println(any)any="hello"fmt.Println(any)any=falsefmt.Println(any)}1接口聲明運(yùn)行結(jié)果為:1hellofalse作為錯(cuò)誤處理的標(biāo)準(zhǔn)模式如果函數(shù)要返回錯(cuò)誤,則返回值類型列表中肯定包含errorerror處理過程類似于C語(yǔ)言中的錯(cuò)誤碼,可逐層返回,直到被處理error接口packagemainimport("errors""fmt""math")funcSqrt(ffloat64)(float64,error){iff<0{return-1,errors.New("開平方根的數(shù)字不能小于0")}returnmath.Sqrt(f),nil}funcmain(){result,err:=Sqrt(-13)iferr!=nil{fmt.Println(err)}else{fmt.Println(result)}}1接口聲明運(yùn)行結(jié)果為:開平方根的數(shù)字不能小于002接口與結(jié)構(gòu)體接口與結(jié)構(gòu)體的關(guān)系一個(gè)結(jié)構(gòu)體類型實(shí)現(xiàn)多個(gè)接口一個(gè)接口被多個(gè)結(jié)構(gòu)體實(shí)現(xiàn)接口與結(jié)構(gòu)體關(guān)系接口和結(jié)構(gòu)體類型之間是多對(duì)多的關(guān)系一個(gè)結(jié)構(gòu)體類型可以實(shí)現(xiàn)多個(gè)接口一個(gè)接口也可以被多個(gè)結(jié)構(gòu)體類型所實(shí)現(xiàn)2接口與結(jié)構(gòu)體type接口類型名1interface{

方法名1(參數(shù)列表1)返回值列表1}type接口類型名2interface{

方法名2(參數(shù)列表2)返回值列表2}一個(gè)結(jié)構(gòu)體類型實(shí)現(xiàn)多個(gè)接口2接口與結(jié)構(gòu)體type結(jié)構(gòu)體struct{

字段名1字段類型1

字段名2字段類型2}type(結(jié)構(gòu)體名結(jié)構(gòu)體)方法名1(參數(shù)列表1)返回值列表1{}type(結(jié)構(gòu)體名結(jié)構(gòu)體)方法名2(參數(shù)列表2)返回值列表2{}2接口與結(jié)構(gòu)體packagemainimport"fmt"typeruninterface{running(timeint)int}typeeatinterface{eating(foodstring)int}typepersonstruct{weightint}func(p*person)running(timeint)int{p.weight-=time/5returnp.weight}func(p*person)eating(foodstring)int{p.weight+=1returnp.weight}funcmain(){p1:=&person{weight:50,}fmt.Println(p1.weight)p1.running(20)fmt.Println(p1.weight)p1.eating("面包")fmt.Println(p1.weight)}運(yùn)行結(jié)果為:5046472接口與結(jié)構(gòu)體一個(gè)接口被多個(gè)結(jié)構(gòu)體實(shí)現(xiàn)type接口類型名interface{

方法名1(參數(shù)列表1)返回值列表1

方法名2(參數(shù)列表2)返回值列表2}type結(jié)構(gòu)體1struct{

字段名1字段類型1}type結(jié)構(gòu)體2struct{

字段名2字段類型2}type結(jié)構(gòu)體3struct{

字段名3字段類型3}type(結(jié)構(gòu)體名1結(jié)構(gòu)體1)方法名1(參數(shù)列表1)返回值列表1{}type(結(jié)構(gòu)體名2結(jié)構(gòu)體2)方法名2(參數(shù)列表2)返回值列表2{}type(結(jié)構(gòu)體名3結(jié)構(gòu)體3)方法名2(參數(shù)列表2)返回值列表2{}2接口與結(jié)構(gòu)體packagemainimport"fmt"typewhointerface{who(positionstring)string}typetearcherstruct{positionstringnamestring}typestudentstruct{positionstringnamestring}func(t*tearcher)who(namestring)string{t.position="教師"=namereturnt.position}func(s*student)who(namestring)string{s.position="學(xué)生"=namereturns.position}funcmain(){vartwho=&tearcher{position:"未知",name:"未知",}t.who("Go")fmt.Println(t)varswho=&student{position:"未知",name:"未知",}s.who("go")fmt.Println(s)}運(yùn)行結(jié)果為:&{教師Go}&{學(xué)生go}03接口的嵌套接口嵌套定義接口嵌套格式3接口的嵌套在Go語(yǔ)言中,不僅僅結(jié)構(gòu)體與結(jié)構(gòu)體之間可以嵌套,接口與接口之間也可以嵌套,被包含的接口中的所有方法都會(huì)被包含到新的接口中。接口嵌套接口嵌套格式type接口類型名1interface{

方法名1()}type接口類型名2interface{

方法名2()}type接口類型名3interface{

接口類型名1

接口類型名2

方法名3()}3接口的嵌套//接口嵌套typequeueinterface{ height()}typeruninterface{ weight()}typeBMIinterface{ queue run age()}//接口未嵌套typequeueinterface{height()}typeruninterface{weight()}typeBMIinterface{height()weight()age()}一個(gè)接口可以包含一個(gè)或多個(gè)其他的接口,這相當(dāng)于直接將這些內(nèi)嵌接口的方法列舉在外層接口中一樣。只要接口的所有方法被實(shí)現(xiàn),則這個(gè)接口中的所有嵌套接口的方法均可以被調(diào)用。04類型斷言類型斷言介紹類型斷言語(yǔ)法4類型斷言類型斷言語(yǔ)法value,ok:=x.(T)其中:value表示返回x的值;ok是一個(gè)布爾值,用于判斷x是否為T類型;x表示一個(gè)接口的類型;T表示一個(gè)具體的類型(也可為接口類型)需要注意的是:如果T是具體某個(gè)類型,類型斷言會(huì)檢查x的動(dòng)態(tài)類型是否等于具體類型T。如果檢查成功,類型斷言返回的結(jié)果是x的動(dòng)態(tài)值,其類型是T。如果T是接口類型,類型斷言會(huì)檢查x的動(dòng)態(tài)類型是否滿足T。如果檢查成功,x的動(dòng)態(tài)值不會(huì)被提取,返回值是一個(gè)類型為T的接口值。無(wú)論T是什么類型,如果x是nil接口值,類型斷言都會(huì)失敗。類型斷言是使用在接口變量上的操作。檢查它操作對(duì)象的動(dòng)態(tài)類型是否和斷言的類型匹配其目的是用于檢查接口類型變量所持有的值是否實(shí)現(xiàn)了期望的接口或者具體的類型。

類型斷言介紹4類型斷言packagemainimport"fmt"funcmain(){ varanyinterface{} any="神舟十四號(hào)" title:=any.(string) fmt.Printf("中國(guó)載人航天

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論