Primeri vmesnikov Golang

Primeri Vmesnikov Golang



V Go nabor podpisov metod sestavlja vmesnik. Določa skupino dejanj, ki jih mora tip izvesti, da se ugotovi, da izpolnjuje ta vmesnik. Z drugimi besedami, vmesnik določa metode, ki jih mora imeti tip, vendar ne zagotavlja informacij o izvedbi. Čeprav vmesniki Go zagotavljajo močan mehanizem za doseganje polimorfnega vedenja in pisanje kode za večkratno uporabo. V tej objavi bomo preučili zamisel o vmesnikih v Go in ponudili primere iz resničnega sveta, da pokažemo, kako jih uporabljati.

Primer 1: prazen vmesnik Golang

Začnite s praznim vmesnikom{}, ki se v Go imenuje vmesnik. Označuje vrsto, ki lahko shrani katero koli vrednost. Sledi izvorna koda za prazen vmesnik v Go:

paket glavni
uvoz 'fmt'
vrsta MarksCalculator vmesnik {}
funk glavni () {
je bil m MarksCalculator
fmt . Println ( m )
}

Tukaj nudimo kodo, kjer vmesnik »MarksCalculator« nima nobenih določenih podpisov metode, ker je prazen. Posledično ne zagotavlja nobene funkcionalnosti. Nato imamo funkcijo main() tega praznega vmesnika, kjer je deklarirana spremenljivka »m« tipa MarksCalculator. Ker je vmesnik prazen, lahko 'm' vsebuje katero koli vrednost katere koli vrste. V tem primeru je »m« neinicializiran, tako da ima vrednost nič za svoj tip, ki je za vmesnike »nič«. Ko je »m« natisnjen z uporabo »fmt.Println«, izpiše »nil« na konzolo.







Izhod, ki je pridobljen, je »nič«, kot se pričakuje od prejšnje izvorne kode:





Primer 2: Implementacija vmesnika Golang

Ta razdelek prikazuje izvedbo vmesnika Golang. Vrsta mora ponuditi izvedbo za vsako od navedenih metod v vmesniku, da jo lahko implementirate v Go. Sledi podana izvorna koda za implementacijo vmesnika:





paket glavni
uvoz (
'fmt'
)
vrsta Samoglasniki vmesnik {
Iskanje samoglasnikov () [] runa
}
vrsta MyStr vrvica
funk ( st MyStr ) Iskanje samoglasnikov () [] runa {
je bil samoglasniki [] runa
za _ , runa := obseg st {
če runa == 'a' || runa == 'Je' || runa == 'jaz' || runa == 'O' || runa == 'noter' {
samoglasniki = priložiti ( samoglasniki , runa )
}
}
vrnitev samoglasniki
}

funk glavni () {
NewString := MyStr ( 'Vmesniki GoLang' )
je bil v1 Samoglasniki
v1 = NewString
fmt . Printf ( 'Samoglasniki so %c' , v1 . Iskanje samoglasnikov ())
}

Tukaj koda definira vmesnik z imenom 'Vowels', ki določa eno samo metodo SearchVowels(), ki vrne delček rune (tip int32). Vmesnik omogoča, da se kateremu koli tipu, ki izvaja ta podpis metode, dodeli spremenljivki tipa vmesnika. Nato je deklariran nov tip »MyStr«, ki je vzdevek za osnovni niz tipa. To pomeni, da »MyStr« podeduje vse metode niza, vendar je ločen tip.

Po tem implementiramo metodo SearchVowels() za tip 'MyStr'. Ta metoda skenira vhodni niz znak za znakom in preveri, ali je vsak znak samoglasnik (»a«, »e«, »i«, »o« ali »u«). Če je znak samoglasnik, se pripne rezini samoglasnika.



Znotraj funkcije main() se ustvari spremenljivka »NewString« tipa »MyStr« z vrednostjo »GoLang Interfaces«. Nato je deklarirana spremenljivka »v1« tipa »Vowels«. Ker »MyStr« izvaja metodo SearchVowels(), ki je definirana v vmesniku »Vowels«, se lahko »NewString« dodeli »v1«.

Izhod prikaže vse nize samoglasnikov, ki jih najdemo v navedenem nizu:

Primer 3: Vmesnik Golang Stringer

Poleg tega ima Golang vnaprej določen vmesnik »Stringer« v paketu »fmt«. Omogoča tipu po meri, da nadzoruje svojo predstavitev niza, ko je oblikovan z glagolom »%v« v funkcijah tiskanja paketa »fmt«. Sledi primer kode za stringer vmesnik Go:

paket glavni
uvoz (
'fmt'
)
vrsta študent struct {
Ime vrvica
stopnja vrvica
}
funk ( s Študent ) Vrvica () vrvica {
vrnitev fmt . Sprintf ( '%s je (n) %s' , s . Ime , s . stopnja )
}
funk glavni () {
s1 := študent { 'Elena Gilbert' , 'Računalništvo' }
s2 := študent { 'Caroline Candice' , 'BBA' }
fmt . Println ( s1 )
fmt . Println ( s2 )
}

Tukaj koda najprej uvozi potrebni paket, ki je »fmt« za tiskanje na konzolo. Nato definiramo tip strukture »Študent« z dvema poljema: »Ime« in »Stopnja«. Ta struktura predstavlja informacije študenta. Nadalje se ustvari metoda String() za tip »Študent«. Ta metoda ima sprejemnik tipa 'Študent' in vrne niz. Metoda »String()« je posebna metoda v Go, ki se uporablja za prilagoditev predstavitve niza predmeta, ko je natisnjen. V tem primeru metoda »String()« oblikuje in vrne niz, ki vključuje ime in diplomo študenta.

Nato imamo funkcijo main(), kjer sta dve spremenljivki, s1 in s2 tipa »Študent«, deklarirani in inicializirani z informacijami o študentu. Nazadnje koda uporablja funkcijo fmt.Println() za tiskanje vrednosti s1 in s2. Ker je metoda String() definirana za tip »Študent«, Go samodejno pokliče to metodo pri tiskanju predmeta »Študent«. Metoda String() oblikuje študentove informacije s funkcijo »fmt.Sprintf()« in vrne oblikovani niz.

Naslednji izhod natisne objekt tipa »Student« vmesnika stringer:

Primer 4: Preklopni vmesnik vrste Golang

Nato pride vmesnik za preklop tipa Go. Stikalo vrste je nadzorna struktura, ki nam omogoča pregled dinamičnega tipa vrednosti vmesnika. Sledite izvorni kodi vmesnika za preklop tipa:

paket glavni
uvoz 'fmt
func MyFunction(vmesnik F1{}) {
stikalo F1.(tip) {
case int:
fmt.Println('
Vrsta : int , Vrednost : ', F1.(ti))
niz velikih in malih črk:
fmt.Println('
\nVrsta : vrvica , Vrednost : ', F1. (niz))
case float64:
fmt.Println('
\nVrsta : float64 , Vrednost : ', F1. (float64))
privzeto:
fmt.Println('
\nVrsta ni veljavna ')
}
}
func main() {
Moja funkcija('
Vadnica za vmesnike Golang ')
Moja funkcija (89,7)
MyFunction(true)
}

Tukaj podana koda definira funkcijo »MyFunction«, ki sprejme parameter »F1« tipa »interface{}«. To pomeni, da lahko »F1« sprejme vrednost katere koli vrste. Znotraj funkcije se uporablja stavek switch s »F1.(type)« za preverjanje vrste vrednosti, ki je posredovana »MyFunction«. Sintaksa ».(type)« se uporablja v stikalu tipa, da se pridobi osnovni dinamični tip vrednosti vmesnika. Upoštevajte, da primeri preklopa obravnavajo tri posebne vrste: 'int', 'string' in 'float64'. Če se vrsta »F1« ujema z enim od teh primerov. Natisne ustrezen tip in vrednost z uporabo trditev tipa (F1.(int), F1.(string), F1.(float64)). Če se vrsta »F1« ne ujema z nobenim od definiranih primerov, se izvede privzeti primer, ki natisne »Tip ni veljaven«.

Nato se znotraj funkcije main() trikrat pokliče »MyFunction« z različnimi vrednostmi: niz, float64 in Boolean (ki se ne obravnava v stavku switch).

Izhod prikaže predstavitev vmesnika stikala s trditvami tipa:

Primer 5: Več vmesnikov Golang

Poleg tega Go ponuja več vmesnikov, ki mu omogočajo zagotavljanje različnih naborov vedenja glede na kontekst. Ta funkcija se imenuje 'več vmesnikov' ali 'sestava vmesnika'. Naslednja koda prikazuje implementacijo več vmesnikov:

paket glavni
uvoz 'fmt'
vrsto ptice vmesnik {
dihati ()
leteti ()
}

vrsto ptiči vmesnik {
krma ()
}
vrsto Kje struct {
starost int
}
funk ( d kje ) dihati () {
fmt . Println ( 'Golob diha' )
}
funk ( d kje ) leteti () {
fmt . Println ( 'Golobica muha' )
}
funk ( d kje ) krma () {
fmt . Println ( 'Golobica pestuje dojenčke' )
}
funk glavni () {
je bil b ptice
d := Kje {}
b = d
b . dihati ()
b . leteti ()
je bil a avians
a = d
a . krma ()
}

Tu definiramo dva vmesnika: »ptice« in »ptice«. Vmesnik 'birds' deklarira dve metodi: breathe() in fly(). Medtem ko vmesnik »avians« deklarira metodo feed(). Nato struktura »golob« izvaja vse metode vmesnikov »ptic« in »avians«. Ponuja izvedbe za breathe(), fly() in feed().

Nato v funkciji main() deklariramo spremenljivko 'b' tipa 'birds'. Primerek »goloba« je ustvarjen in dodeljen »b« z uporabo dodelitve b = d. Ker »golob« izvaja vse metode vmesnika »ptice«, je ta dodelitev veljavna.

Nato sta metodi breathe() in fly() poklicani na 'b', ki je tipa 'birds'. Podobno je spremenljivka 'a' tipa 'avians' deklarirana in dodeljena s primerkom 'dove' 'd'. Ker »golob« izvaja metodo feed(), ki je definirana v vmesniku »avians«, je tudi ta dodelitev veljavna. Metoda feed() se kliče na 'a', ki je tipa 'avians'. Ker »a« vsebuje primerek »goloba«, se izvede metoda feed(), ki jo izvaja »golob«.

Izhod kaže, da se metode vmesnikov izvajajo pravilno:

Zaključek

Naučili smo se osnov vmesnikov Go in ponudili praktične primere za ponazoritev njihove uporabe. Z definiranjem vmesnikov in njihovo implementacijo z različnimi vrstami lahko ustvarimo prilagodljive in razširljive programe.