Primjeri Golang sučelja

Primjeri Golang Sucelja



U Go, skup potpisa metode sadrži sučelje. Specificira grupu radnji koje tip mora poduzeti da bi bio određen da ispuni to sučelje. Drugim riječima, sučelje specificira metode koje tip mora imati, ali ne daje informacije o implementaciji. Iako Go sučelja pružaju moćan mehanizam za postizanje polimorfnog ponašanja i pisanje koda za višekratnu upotrebu. U ovom ćemo postu ispitati ideju sučelja u Gou i ponuditi primjere iz stvarnog svijeta da pokažemo kako ih koristiti.

Primjer 1: Golang prazno sučelje

Započnite s praznim sučeljem{} koje se u Gou naziva sučeljem. Označava tip koji može pohraniti bilo koju vrijednost. Slijedi izvorni kod za prazno sučelje u Gou:

paket glavni
uvoz 'fmt'
tip MarksCalculator sučelje {}
funk glavni () {
bio je m MarksCalculator
fmt . Println ( m )
}

Ovdje pružamo kod u kojem sučelje 'MarksCalculator' nema nikakve specificirane potpise metode jer je prazno. Kao rezultat toga, ne pruža nikakvu funkcionalnost. Zatim imamo funkciju main() ovog praznog sučelja gdje je deklarirana varijabla 'm' tipa MarksCalculator. Budući da je sučelje prazno, 'm' može sadržavati bilo koju vrijednost bilo koje vrste. U ovom slučaju, 'm' je neinicijaliziran, tako da ima nultu vrijednost za svoju vrstu koja je 'nula' za sučelja. Kada se 'm' ispisuje pomoću 'fmt.Println' ispisuje 'nula' na konzolu.







Izlaz koji se dohvaća je 'nula' kao što se očekuje od prethodnog izvornog koda:





Primjer 2:  Golang implementacija sučelja

Ovaj odjeljak demonstrira implementaciju sučelja Golang. Vrsta mora ponuditi implementaciju za svaku od navedenih metoda u sučelju kako bi se implementirala u Go. Slijedi izvorni kod za implementaciju sučelja:





paket glavni
uvoz (
'fmt'
)
tip Samoglasnici sučelje {
Traži samoglasnike () [] runa
}
tip MyStr niz
funk ( st MyStr ) Traži samoglasnike () [] runa {
bio je samoglasnici [] runa
za _ , runa := domet sv {
ako runa == 'a' || runa == 'To je' || runa == 'ja' || runa == 'O' || runa == 'u' {
samoglasnici = dodati ( samoglasnici , runa )
}
}
povratak samoglasnici
}

funk glavni () {
NewString := MyStr ( 'GoLang sučelja' )
bio je v1 Samoglasnici
v1 = NewString
fmt . Printf ( 'Samoglasnici su %c' , v1 . Traži samoglasnike ())
}

Ovdje kod definira sučelje pod nazivom 'Vowels' koje specificira jednu metodu SearchVowels() koja vraća isječak rune (tip int32). Sučelje omogućuje bilo kojem tipu koji implementira ovaj potpis metode da bude dodijeljen varijabli tipa sučelja. Zatim se deklarira novi tip 'MyStr' koji je alias za niz temeljnog tipa. To znači da 'MyStr' nasljeđuje sve metode niza, ali je različita vrsta.

Nakon toga implementiramo metodu SearchVowels() za tip “MyStr”. Ova metoda skenira ulazni niz znak po znak i provjerava je li svaki znak samoglasnik ('a', 'e', 'i', 'o' ili 'u'). Ako je znak samoglasnik, dodaje se odsječku samoglasnika.



Unutar funkcije main() stvara se varijabla 'NewString' tipa 'MyStr' s vrijednošću 'GoLang Interfaces'. Zatim se deklarira varijabla “v1” tipa “Vowels”. Budući da “MyStr” implementira metodu SearchVowels() koja je definirana u sučelju “Vowels”, “NewString” se može dodijeliti “v1”.

Izlaz prikazuje sve nizove samoglasnika koji se nalaze u navedenom nizu:

Primjer 3: sučelje Golang Stringer

Uz to, Golang ima unaprijed definirano sučelje 'Stringer' u paketu 'fmt'. Omogućuje prilagođenom tipu da kontrolira svoj prikaz niza kada je formatiran s glagolom '%v' u funkcijama ispisa paketa 'fmt'. Slijedi primjer koda za stringer sučelje za Go:

paket glavni
uvoz (
'fmt'
)
tip Student strukturirati {
Ime niz
Stupanj niz
}
funk ( s Student ) Niz () niz {
povratak fmt . Sprintf ( '%s je (n) %s' , s . Ime , s . Stupanj )
}
funk glavni () {
s1 := Student { 'Elena Gilbert' , 'Informatika' }
s2 := Student { 'Caroline Candice' , 'BBA' }
fmt . Println ( s1 )
fmt . Println ( s2 )
}

Ovdje kod prvo uvozi potrebni paket koji je “fmt” za ispis na konzolu. Zatim definiramo tip strukture “Student” s dva polja: “Ime” i “Stupanj”. Ova struktura predstavlja informacije o učeniku. Nadalje, kreira se metoda String() za tip “Student”. Ova metoda ima primatelja tipa “Student” i vraća niz. Metoda “String()” posebna je metoda u Gou koja se koristi za prilagodbu prikaza niza objekta kada se ispisuje. U ovom slučaju, metoda 'String()' formatira i vraća niz koji uključuje ime i diplomu studenta.

Zatim imamo funkciju main() gdje su dvije varijable, s1 i s2 tipa 'Student', deklarirane i inicijalizirane s informacijama o studentu. Na kraju, kod koristi funkciju fmt.Println() za ispis vrijednosti s1 i s2. Budući da je metoda String() definirana za tip 'Student', Go automatski poziva ovu metodu kada ispisuje objekt 'Student'. Metoda String() formatira učenikove podatke pomoću funkcije 'fmt.Sprintf()' i vraća formatirani niz.

Sljedeći izlaz ispisuje objekt tipa 'Student' stringer sučelja:

Primjer 4: sučelje prekidača tipa Golang

Zatim dolazi sučelje za promjenu tipa za Go. Tipski prekidač je kontrolna struktura koja nam omogućuje da pregledamo dinamički tip vrijednosti sučelja. Slijedite izvorni kod sučelja za promjenu tipa:

paket glavni
uvoz 'fmt
func MyFunction(F1 sučelje{}) {
prekidač F1.(tip) {
case int:
fmt.Println('
Tip : int , Vrijednost : ', F1.(ti))
niz velikih i malih slova:
fmt.Println('
\nUpišite : niz , Vrijednost : ', F1. (niz))
case float64:
fmt.Println('
\nUpišite : plovak64 , Vrijednost : ', F1. (float64))
zadano:
fmt.Println('
\nTip nije valjan ')
}
}
func main() {
Moja funkcija('
Vodič za Golang sučelja ')
Moja funkcija (89,7)
Moja funkcija (true)
}

Ovdje navedeni kod definira funkciju 'MyFunction' koja uzima parametar 'F1' tipa 'interface{}'. To znači da 'F1' može prihvatiti vrijednost bilo koje vrste. Unutar funkcije koristi se naredba switch s “F1.(type)” za provjeru tipa vrijednosti koja se prosljeđuje u “MyFunction”. Sintaksa “.(type)” koristi se u tipskom prekidaču da bi se dobio temeljni dinamički tip vrijednosti sučelja. Imajte na umu da slučajevi prekidača ovdje obrađuju tri specifične vrste: 'int', 'string' i 'float64'. Ako tip “F1” odgovara jednom od ovih slučajeva. Ispisuje odgovarajući tip i vrijednost koristeći tvrdnje tipa (F1.(int), F1.(string), F1.(float64)). Ako tip 'F1' ne odgovara nijednom od definiranih slučajeva, izvršava se zadani slučaj koji ispisuje 'Tip nije valjan'.

Nakon toga, unutar funkcije main(), 'MyFunction' se poziva tri puta s različitim vrijednostima: niz, float64 i Boolean (koji se ne obrađuje u naredbi switch).

Izlaz prikazuje demonstraciju sučelja prekidača s tvrdnjama tipa:

Primjer 5: Golang višestruka sučelja

Štoviše, Go nudi višestruka sučelja koja mu omogućuju pružanje različitih skupova ponašanja ovisno o kontekstu. Ova se značajka naziva 'višestruka sučelja' ili 'sastavljanje sučelja'. Sljedeći kod demonstrira implementaciju više sučelja:

paket glavni
uvoz 'fmt'
tip ptice sučelje {
disati ()
letjeti ()
}

tip ptičari sučelje {
hraniti se ()
}
tip Gdje strukturirati {
dob int
}
funk ( d gdje ) disati () {
fmt . Println ( 'Golub diše' )
}
funk ( d gdje ) letjeti () {
fmt . Println ( 'Golubica leti' )
}
funk ( d gdje ) hraniti se () {
fmt . Println ( 'Golub njeguje bebe' )
}
funk glavni () {
bio je b ptice
d := Gdje {}
b = d
b . disati ()
b . letjeti ()
bio je a avians
a = d
a . hraniti se ()
}

Ovdje definiramo dva sučelja: 'ptice' i 'ptice'. Sučelje 'birds' deklarira dvije metode: breathe() i fly(). Dok sučelje “avians” deklarira metodu feed(). Zatim, struktura 'golub' implementira sve metode sučelja 'ptica' i 'avians'. Pruža implementacije za breathe(), fly() i feed().

Zatim deklariramo varijablu 'b' tipa 'ptice' unutar funkcije main(). Instanca 'goluba' se stvara i dodjeljuje 'b' korištenjem dodjele b = d. Budući da 'golub' implementira sve metode sučelja 'ptice', ova je dodjela važeća.

Zatim se metode breathe() i fly() pozivaju na “b” koji je tipa “birds”. Slično, varijabla 'a' tipa 'avians' je deklarirana i dodijeljena s instancom 'dove' od 'd'. Budući da 'dove' implementira metodu feed() koja je definirana u sučelju 'avians', ova dodjela je također važeća. Metoda feed() poziva se na 'a' koji je tipa 'avians'. Kako 'a' sadrži instancu 'golub', izvodi se metoda feed() koju implementira 'golub'.

Izlaz pokazuje da se metode sučelja izvode ispravno:

Zaključak

Naučili smo osnove Go sučelja i pružili praktične primjere za ilustraciju njihove uporabe. Definiranjem sučelja i njihovom implementacijom s različitim tipovima, možemo stvoriti fleksibilne i proširive programe.