Golang sąsajų pavyzdžiai

Golang Sasaju Pavyzdziai



„Go“ metodo parašų rinkinį sudaro sąsaja. Jame nurodoma veiksmų grupė, kurią tipas turi atlikti, kad būtų nustatytas, kad atitiktų tą sąsają. Kitaip tariant, sąsaja nurodo metodus, kuriuos tipas turi turėti, bet nepateikia įgyvendinimo informacijos. Nors „Go“ sąsajos suteikia galingą mechanizmą, leidžiantį pasiekti polimorfinį elgesį ir parašyti daugkartinį kodą. Šiame įraše išnagrinėsime „Go“ sąsajų idėją ir pasiūlysime realių pavyzdžių, kaip jas naudoti.

1 pavyzdys: „Golang Empty“ sąsaja

Pradėkite nuo tuščios sąsajos{}, kuri programoje Go vadinama sąsaja. Tai nurodo tipą, kuris gali saugoti bet kokią vertę. Toliau pateikiamas tuščios „Go“ sąsajos šaltinio kodas:

paketą pagrindinis
importuoti 'fmt'
tipo MarksCalculator sąsaja {}
func pagrindinis () {
buvo m MarksCalculator
fmt . Println ( m )
}

Čia pateikiame kodą, kuriame „MarksCalculator“ sąsaja neturi jokių nurodytų metodų parašų, nes ji tuščia. Dėl to jis nesuteikia jokių funkcijų. Toliau turime šios tuščios sąsajos pagrindinę () funkciją, kurioje deklaruojamas MarksCalculator tipo kintamasis „m“. Kadangi sąsaja tuščia, „m“ gali turėti bet kokią bet kokio tipo reikšmę. Šiuo atveju „m“ yra neinicializuotas, todėl jo tipo reikšmė yra nulinė, o sąsajoms ji yra „nulis“. Kai „m“ atspausdinamas naudojant „fmt.Println“, į konsolę išvedama „nulis“.







Gauta išvestis yra „nulis“, kaip tikėtasi iš ankstesnio šaltinio kodo:





2 pavyzdys:  sąsajos „Golang“ diegimas

Šiame skyriuje parodytas „Golang“ sąsajos įgyvendinimas. Tipas turi pasiūlyti kiekvieno nurodyto metodo įgyvendinimą sąsajoje, kad jį būtų galima įgyvendinti Go. Toliau pateikiamas sąsajos diegimo šaltinio kodas:





paketą pagrindinis
importuoti (
'fmt'
)
tipo Balsės sąsaja {
Search Balsės () [] rune
}
tipo MyStr styga
func ( St MyStr ) Search Balsės () [] rune {
buvo balsių [] rune
dėl _ , rune := diapazonas Šv {
jeigu rune == 'a' || rune == 'Tai yra' || rune == 'aš' || rune == 'o' || rune == 'į' {
balsių = pridėti ( balsių , rune )
}
}
grąžinti balsių
}

func pagrindinis () {
NaujaEilutė := MyStr ( „GoLang sąsajos“ )
buvo v1 Balsės
v1 = NaujaEilutė
fmt . Printf ( 'Balsės yra %c' , v1 . Search Balsės ())
}

Čia kodas apibrėžia sąsają, pavadintą „Balsės“, kuri nurodo vieną metodą SearchVowels(), kuris grąžina runos gabalėlį (įveskite int32). Sąsaja leidžia bet kuriam tipui, įgyvendinančiam šį metodo parašą, priskirti sąsajos tipo kintamajam. Tada deklaruojamas naujas „MyStr“ tipas, kuris yra pagrindinės tipo eilutės slapyvardis. Tai reiškia, kad „MyStr“ paveldi visus eilutės metodus, bet yra atskiras tipas.

Po to „MyStr“ tipui įdiegiame SearchVowels() metodą. Šis metodas nuskaito įvesties eilutės simbolį po simbolio ir patikrina, ar kiekvienas simbolis yra balsė („a“, „e“, „i“, „o“ arba „u“). Jei simbolis yra balsis, jis pridedamas prie balsės pjūvio.



Funkcijos main() viduje sukuriamas „MyStr“ tipo „NewString“ kintamasis su „GoLang Interfaces“ reikšme. Toliau deklaruojamas „v1“ „balsių“ tipo kintamasis. Kadangi „MyStr“ įgyvendina SearchVowels() metodą, kuris yra apibrėžtas „Vowels“ sąsajoje, „NewString“ galima priskirti „v1“.

Išvestyje rodomas visas balsių, esančių nurodytoje eilutėje, masyvas:

3 pavyzdys: Golang Stringer sąsaja

Be to, „Golang“ turi iš anksto nustatytą „Stringer“ sąsają „fmt“ pakete. Tai leidžia pasirinktiniam tipui valdyti savo eilutės atvaizdavimą, kai suformatuotas naudojant „%v“ veiksmažodį „fmt“ paketo spausdinimo funkcijose. Toliau pateikiamas Go stringer sąsajos kodo pavyzdys:

paketą pagrindinis
importuoti (
'fmt'
)
tipo Studentas struktūra {
vardas styga
Laipsnis styga
}
func ( s Studentas ) Styga () styga {
grąžinti fmt . Sprintf ( '%s yra (n) %s' , s . vardas , s . Laipsnis )
}
func pagrindinis () {
s1 := Studentas { 'Elena Gilbert' , 'Kompiuteris mokslas' }
s2 := Studentas { 'Caroline Candice' , 'BBA' }
fmt . Println ( s1 )
fmt . Println ( s2 )
}

Čia kodas pirmiausia importuoja reikiamą paketą, kuris yra „fmt“, kad būtų galima spausdinti į konsolę. Tada apibrėžiame struktūros tipą „Studentas“ su dviem laukais: „Vardas“ ir „Laipsnis“. Ši struktūra atspindi mokinio informaciją. Be to, „Studento“ tipui sukuriamas String() metodas. Šis metodas turi „Studento“ tipo imtuvą ir grąžina eilutę. Metodas „String()“ yra specialus Go metodas, naudojamas tinkinti spausdinamo objekto eilutės atvaizdavimą. Šiuo atveju metodas „String()“ formatuoja ir grąžina eilutę, kurioje yra studento vardas ir laipsnis.

Toliau turime funkciją main(), kurioje deklaruojami ir inicijuojami mokinio informacija du kintamieji s1 ir s2 tipo „Studentas“. Galiausiai kodas naudoja funkciją fmt.Println() s1 ir s2 reikšmėms spausdinti. Kadangi metodas String() yra apibrėžtas „Studento“ tipui, „Go“ automatiškai iškviečia šį metodą spausdindama objektą „Student“. String() metodas suformatuoja mokinio informaciją naudodamas funkciją „fmt.Sprintf()“ ir grąžina suformatuotą eilutę.

Ši išvestis išspausdina stringer sąsajos „Studento“ tipo objektą:

4 pavyzdys: Golang tipo jungiklio sąsaja

Tada ateina „Go“ tipo jungiklio sąsaja. Tipo jungiklis yra valdymo struktūra, leidžianti patikrinti sąsajos vertės dinaminį tipą. Vykdykite jungiklio sąsajos tipo šaltinio kodą:

paketą pagrindinis
importuoti 'fmt
func MyFunction(F1 sąsaja{}) {
jungiklis F1.(tipas) {
atvejis tarp:
fmt.Println('
Tipas : tarpt , Vertė : ', F1. (jūs))
atvejo eilutė:
fmt.Println('
\nTipas : styga , Vertė : ', F1. (eilutė))
case float64:
fmt.Println('
\nTipas : plūdė64 , Vertė : “, F1.(float64))
numatytas:
fmt.Println('
\nTipas netinkamas “)
}
}
func main() {
MyFunction('
Golang sąsajų pamoka “)
„MyFunction“ (89.7)
Mano funkcija (tiesa)
}

Čia pateiktas kodas apibrėžia funkciją „MyFunction“, kuri paima „sąsaja{}“ tipo parametrą „F1“. Tai rodo, kad „F1“ gali priimti bet kokio tipo reikšmę. Funkcijos viduje naudojamas jungiklio sakinys su „F1.(type)“, kad būtų patikrintas „MyFunction“ perduodamos reikšmės tipas. Sintaksė „.(type)“ naudojama tipo jungiklyje, norint gauti pagrindinį sąsajos vertės dinaminį tipą. Atminkite, kad čia esantys jungiklių dėklai tvarko tris konkrečius tipus: „int“, „string“ ir „float64“. Jei „F1“ tipas atitinka vieną iš šių atvejų. Jis atspausdina atitinkamą tipą ir reikšmę naudodamas tipo tvirtinimus (F1.(int), F1.(string), F1.(float64)). Jei „F1“ tipas neatitinka nė vieno iš apibrėžtų atvejų, vykdomas numatytasis atvejis, kuris išspausdina „Tipas netinkamas“.

Po to funkcijoje main() „MyFunction“ iškviečiama tris kartus su skirtingomis reikšmėmis: eilute, float64 ir Būlio verte (kuri nėra tvarkoma komutatoriaus sakinyje).

Išvestis rodo jungiklio sąsajos demonstravimą su tipo tvirtinimais:

5 pavyzdys: „Golang“ kelios sąsajos

Be to, „Go“ siūlo kelias sąsajas, leidžiančias teikti skirtingus elgesio rinkinius, atsižvelgiant į kontekstą. Ši funkcija vadinama „keliomis sąsajomis“ arba „sąsajos kompozicija“. Šis kodas parodo kelių sąsajų įgyvendinimą:

paketą pagrindinis
importuoti 'fmt'
tipo paukščiai sąsaja {
kvėpuoti ()
skristi ()
}

tipo paukščiai sąsaja {
maitinti ()
}
tipo Kur struktūra {
amžiaus tarpt
}
func ( d kur ) kvėpuoti () {
fmt . Println ( 'Balandis kvėpuoja' )
}
func ( d kur ) skristi () {
fmt . Println ( 'balandžių musė' )
}
func ( d kur ) maitinti () {
fmt . Println ( „Balandžiai auklėja kūdikius“ )
}
func pagrindinis () {
buvo b paukščiai
d := Kur {}
b = d
b . kvėpuoti ()
b . skristi ()
buvo a paukštis
a = d
a . maitinti ()
}

Čia apibrėžiame dvi sąsajas: „paukščius“ ir „paukščius“. „Paukščių“ sąsaja deklaruoja du metodus: kvėpuoti () ir skristi (). Nors „avians“ sąsaja deklaruoja feed() metodą. Tada „balandžių“ struktūra įgyvendina visus „paukščių“ ir „paukščių“ sąsajų metodus. Jame pateikiami kvėpavimo (), fly () ir feed () įgyvendinimai.

Toliau funkcijoje main () deklaruojame „paukščių“ tipo kintamąjį „b“. Sukuriamas „balandėlio“ pavyzdys ir priskiriamas „b“, naudojant b = d priskyrimą. Kadangi „balandis“ įgyvendina visus „paukščių“ sąsajos metodus, ši užduotis galioja.

Tada kvėpavimo () ir skristi () metodai iškviečiami „b“, kuris yra „paukščių“ tipo. Panašiai deklaruojamas „avians“ tipo kintamasis „a“ ir jam priskiriamas „d“ egzempliorius „dove“. Kadangi 'dove' įgyvendina feed() metodą, kuris yra apibrėžtas 'avians' sąsajoje, šis priskyrimas taip pat galioja. Feed() metodas vadinamas 'a', kuris yra 'paukščių' tipo. Kadangi „a“ yra „dove“ egzempliorius, vykdomas „dove“ įdiegtas feed() metodas.

Išvestis rodo, kad sąsajų metodai vykdomi teisingai:

Išvada

Išmokome „Go“ sąsajų pagrindų ir pateikėme praktinių pavyzdžių, iliustruojančių jų naudojimą. Apibrėždami sąsajas ir jas įgyvendindami skirtingais tipais, galime sukurti lanksčias ir išplečiamas programas.