Golangi liideste näited

Golangi Liideste Naited



Go-s sisaldab meetodi allkirjade komplekt liidest. See määrab toimingute rühma, mida tüüp peab selle liidese täitmiseks kindlaks tegema. Teisisõnu, liides määrab meetodid, mis tüübil peavad olema, kuid ei anna rakendusteavet. Kuigi Go liidesed pakuvad võimsat mehhanismi polümorfse käitumise saavutamiseks ja korduvkasutatava koodi kirjutamiseks. Selles postituses uurime Go liideste ideed ja pakume reaalseid näiteid nende kasutamise näitamiseks.

Näide 1: Golangi tühi liides

Alustage tühja liidesega{}, mida Go puhul nimetatakse liideseks. See näitab tüüpi, mis suudab salvestada mis tahes väärtust. Järgmine on Go tühja liidese lähtekood:

pakett peamine
importida 'fmt'
tüüp MarksCalculator liides {}
func peamine () {
oli m MarksCalculator
fmt . Println ( m )
}

Siin pakume koodi, kus liidesel 'MarksCalculator' ei ole määratud meetodi allkirju, kuna see on tühi. Selle tulemusena ei paku see ühtegi funktsiooni. Järgmisena on meil selle tühja liidese funktsioon main(), kus deklareeritakse MarksCalculator tüüpi muutuja 'm'. Kuna liides on tühi, võib 'm' sisaldada mis tahes tüüpi väärtusi. Sel juhul on „m” initsialiseerimata, seega on selle tüübi jaoks nullväärtus, mis liideste puhul on null. Kui 'm' prinditakse 'fmt.Println' abil, väljastab see konsooli 'null'.







Otsitud väljund on null, nagu eeldati eelmisest lähtekoodist:





Näide 2: liidese Golangi juurutamine

See jaotis näitab Golangi liidese rakendamist. Tüüp peab pakkuma iga liideses määratud meetodi rakendamist, et seda Go-s rakendada. Allpool on antud liidese juurutamise lähtekood:





pakett peamine
importida (
'fmt'
)
tüüp Täishäälikud liides {
Otsing Vokaalid () [] ruun
}
tüüp MyStr string
func ( St MyStr ) Otsing Vokaalid () [] ruun {
oli täishäälikud [] ruun
jaoks _ , ruun := ulatus St {
kui ruun == 'a' || ruun == 'See on' || ruun == 'mina' || ruun == 'o' || ruun == 'sisse' {
täishäälikud = lisama ( täishäälikud , ruun )
}
}
tagasi täishäälikud
}

func peamine () {
UusString := MyStr ( 'GoLangi liidesed' )
oli v1 vokaalid
v1 = UusString
fmt . Printf ( 'Vokaalid on %c' , v1 . Otsing Vokaalid ())
}

Siin määratleb kood liidese nimega 'Vowels', mis määrab ühe meetodi SearchVowels(), mis tagastab ruuni lõigu (tüüp int32). Liides võimaldab liidese tüübi muutujale määrata mis tahes tüüpi, mis rakendab seda meetodi allkirja. Seejärel deklareeritakse uus 'MyStr' tüüp, mis on aluseks oleva tüübistringi varjunimi. See tähendab, et 'MyStr' pärib kõik stringimeetodid, kuid on eraldi tüüp.

Pärast seda rakendame 'MyStr' tüübi jaoks meetodi SearchVowels(). See meetod skannib sisendstringi tähemärgi haaval ja kontrollib, kas iga märk on täishäälik ('a', 'e', 'i', 'o' või 'u'). Kui märk on täishäälik, lisatakse see vokaalilõigule.



Funktsiooni main() sees luuakse 'MyStr' tüüpi muutuja 'NewString' väärtusega 'GoLang Interfaces'. Järgmisena deklareeritakse 'Vowels' tüüpi muutuja 'v1'. Kuna 'MyStr' rakendab 'Vowels' liideses määratletud meetodit SearchVowels(), saab 'NewString' määrata väärtusele 'v1'.

Väljund kuvab kogu vokaalide massiivi, mis on leitud määratud stringist:

Näide 3: Golang Stringeri liides

Lisaks on Golangil 'fmt' paketis eelmääratletud liides 'Stringer'. See võimaldab kohandatud tüübil juhtida oma stringi esitust, kui see on vormindatud paketi „fmt” printimisfunktsioonides verbiga „%v”. Järgmine on Go stringeri liidese näidiskood:

pakett peamine
importida (
'fmt'
)
tüüp Üliõpilane struktuur {
Nimi string
Kraad string
}
func ( s Üliõpilane ) String () string {
tagasi fmt . Sprintf ( '%s on (n) %s' , s . Nimi , s . Kraad )
}
func peamine () {
s1 := Üliõpilane { 'Elena Gilbert' , 'Arvutiteadus' }
s2 := Üliõpilane { 'Caroline Candice' , 'BBA' }
fmt . Println ( s1 )
fmt . Println ( s2 )
}

Siin impordib kood kõigepealt konsooli printimiseks vajaliku paketi, mis on 'fmt'. Seejärel määratleme struktuuritüübi 'Õpilane' kahe väljaga: 'Nimi' ja 'kraad'. See struktuur esindab õpilase teavet. Lisaks luuakse 'Õpilane' tüübi jaoks meetod String(). Sellel meetodil on „Õpilane” tüüpi vastuvõtja ja see tagastab stringi. Meetod 'String()' on Go spetsiaalne meetod, mida kasutatakse objekti stringi esituse kohandamiseks selle printimisel. Sel juhul vormindab ja tagastab meetod 'String()' stringi, mis sisaldab õpilase nime ja kraadi.

Järgmisena on meil funktsioon main(), kus deklareeritakse kaks muutujat, s1 ja s2 tüüpi 'õpilane', ja need lähtestatakse õpilase teabega. Lõpuks kasutab kood s1 ja s2 väärtuste printimiseks funktsiooni fmt.Println(). Kuna meetod String() on määratletud tüübile „Õpilane”, kutsub Go automaatselt selle meetodi objekti „Õpilane” printimisel. Meetod String() vormindab õpilase teabe funktsiooni 'fmt.Sprintf()' abil ja tagastab vormindatud stringi.

Järgmine väljund prindib stringeri liidese tüüpi „Õpilane” objekti:

Näide 4: Golangi tüüpi lüliti liides

Seejärel tuleb Go tüübilüliti liides. Tüübilüliti on juhtimisstruktuur, mis võimaldab meil kontrollida liidese väärtuse dünaamilist tüüpi. Järgige lülitiliidese tüübi lähtekoodi:

pakett peamine
importida 'fmt
func MyFunction(F1 liides{}) {
lüliti F1.(tüüp) {
case int:
fmt.Println('
Tüüp : int , Väärtus : ', F1. (teie))
ümbrise string:
fmt.Println('
\nTüüp : string , Väärtus : ', F1. (string))
case float64:
fmt.Println('
\nTüüp : ujuk64 , Väärtus : ', F1.(float64))
vaikimisi:
fmt.Println('
\nTüüp ei sobi ')
}
}
func main() {
MinuFunktsioon('
Golangi liideste õpetus ')
MyFunction (89,7)
Minu funktsioon (tõene)
}

Siin määratleb esitatud kood funktsiooni „MyFunction”, mis võtab „liidese{}” tüüpi parameetri „F1”. See näitab, et 'F1' võib aktsepteerida mis tahes tüüpi väärtusi. Funktsiooni sees kasutatakse lülitilauset koos 'F1.(type)' funktsiooniga 'MyFunction' edastatava väärtuse tüübi kontrollimiseks. '.(type)' süntaksit kasutatakse tüübilülitis liidese väärtuse aluseks oleva dünaamilise tüübi hankimiseks. Pange tähele, et siinsed lülitijuhtumid käsitlevad kolme kindlat tüüpi: 'int', 'string' ja 'float64'. Kui tüüp 'F1' vastab ühele neist juhtudest. See prindib vastava tüübi ja väärtuse, kasutades tüübiväiteid (F1.(int), F1.(string), F1.(float64)). Kui tüüp 'F1' ei vasta ühelegi määratletud juhtumile, käivitatakse vaikejuhtum, mis prindib 'Tüüp ei kehti'.

Seejärel kutsutakse funktsioonis main() kolm korda funktsiooni MyFunction erinevate väärtustega: string, float64 ja Boolean (mida lüliti avalduses ei käsitleta).

Väljund kuvab lüliti liidese demonstratsiooni koos tüübi kinnitustega:

Näide 5: Golangi mitu liidest

Lisaks pakub Go mitmeid liideseid, mis võimaldavad tal sõltuvalt kontekstist pakkuda erinevaid käitumise komplekte. Seda funktsiooni nimetatakse 'mitmeks liideseks' või 'liidese koostiseks'. Järgmine kood demonstreerib mitme liidese rakendamist:

pakett peamine
importida 'fmt'
tüüp linnud liides {
hingata ()
lennata ()
}

tüüp linnud liides {
sööda ()
}
tüüp Kus struktuur {
vanus int
}
func ( d kus ) hingata () {
fmt . Println ( 'Tuvi hingab' )
}
func ( d kus ) lennata () {
fmt . Println ( 'Tuvi lendab' )
}
func ( d kus ) sööda () {
fmt . Println ( 'Tuvid kasvatavad lapsi' )
}
func peamine () {
oli b linnud
d := Kus {}
b = d
b . hingata ()
b . lennata ()
oli a linnud
a = d
a . sööda ()
}

Siin määratleme kaks liidest: 'linnud' ja 'linnud'. 'Linnu' liides deklareerib kahte meetodit: hinga () ja lend (). Kuigi liides 'avians' deklareerib feed() meetodi. Seejärel rakendab 'tuvi' struktuur nii 'lindude' kui ka 'lindude' liideste kõiki meetodeid. See pakub hingamise (), fly () ja feed () rakendusi.

Järgmisena deklareerime funktsiooni main() sees muutuja 'b' tüüpi 'birds'. 'Tuvi' eksemplar luuakse ja määratakse 'b'-le, kasutades määrangut b = d. Kuna 'tuvi' rakendab kõiki 'lindude' liidese meetodeid, on see ülesanne kehtiv.

Seejärel kutsutakse 'b', mis on 'lindude' tüüpi, meetodid hingama () ja lendama (). Samamoodi deklareeritakse muutuja 'a' tüüpi 'avians' ja omistatakse 'dove' eksemplarile 'd'. Kuna 'dove' rakendab feed() meetodit, mis on määratletud 'avians' liideses, kehtib ka see määrang. Sööda() meetodit kutsutakse 'a', mis on 'lindude' tüüpi. Kuna 'a' sisaldab 'dove' eksemplari, käivitatakse feed() meetod, mida 'dove' rakendab.

Väljund näitab, et liideste meetodid täidetakse õigesti:

Järeldus

Õppisime Go liideste põhitõdesid ja tõime nende kasutamise illustreerimiseks praktilisi näiteid. Liideste defineerimise ja erinevate tüüpidega juurutamise abil saame luua paindlikke ja laiendatavaid programme.