Mis on peegeldus Golangis

Mis On Peegeldus Golangis



Golangi refleksioon võimaldab programmil käitamise ajal uurida ja muuta andmestruktuure, tüüpe ja väärtusi. See pakub funktsioonide komplekti, mis võimaldab meil uurida mis tahes muutuja tüüpi ja väärtust käitusajal, luua uusi tüüpide eksemplare ja muuta olemasolevate muutujate väärtust. See artikkel hõlmab erinevaid Golangi funktsioone peegelduspaketis.

Sisukord

Go on staatiliselt trükitud keel, seega peab muutuja tüüp olema kompileerimise ajal teada. Teatud stsenaariumide korral võib osutuda vajalikuks käsitleda väärtusi, mille tüüpe ei saa määrata enne, kui programm on käivitatud.







Näiteks peame võib-olla kirjutama funktsiooni, mis võib töötada erinevat tüüpi argumentidega, või võib tekkida vajadus tundmatu tüüpi andmete järjestamiseks ja deserialiseerimiseks. See on koht, kus Golangis kasutatakse peegelduspaketti.



Reflect Package in Go

Peegelduspakett sisaldab funktsioonide komplekti, mis võimaldavad meil väärtusi käitusajal kontrollida ja nendega manipuleerida, olenemata nende tüübist. Nende funktsioonide abil saame hankida teavet mis tahes muutuja tüübi ja väärtuse kohta, luua uusi tüüpide eksemplare ja muuta olemasolevate muutujate väärtusi.



Golangi peegelduspakett sisaldab kahte tüüpi: Tüüp ja väärtus. Tüüp tähistab Go tüüpi, näiteks int, string või kohandatud struktuur. Väärtus tähistab teatud tüüpi väärtust, näiteks 42 või 'tere'.





Peegelduspakett sisaldab ka funktsioonide komplekti, mis võimaldavad meil saada muutujatest tüübi ja väärtuse objekte. Näiteks funktsioon reflekt.TypeOf() tagastab objekti Type, mis esindab muutuja tüüpi, samas kui funktsioon reflekt.ValueOf() annab Value objekti, mis näitab muutuja väärtust.

Järgmistes osades uurime mõningaid reflekteerimispaketis sagedamini kasutatavaid funktsioone.



peegelda.Kopeeri() Funktsioon

Reflektorpaketi funktsiooni reflekteeri.Copy() kasutatakse ühe lõigu väärtuste kopeerimiseks teise viilu. Selleks on vaja kahte parameetrit, dst ja src, mis mõlemad peavad olema sama elemenditüübiga lõigu väärtused. Funktsioon kopeerib src-lõigu väärtused dst-lõigu ja tagastab kopeeritud elementide arvu.

Funktsiooni reflect.Copy() demonstreeritakse järgmises näites:

pakett peamine

importida (

'fmt'
'peegeldama'
)
func peamine () {
src := [] int { 1 , 2 , 3 , 4 , 5 }
dst := tegema ([] int , ainult ( src ))
n := peegeldama . Kopeeri ( peegeldama . ValueOf ( dst ), peegeldama . ValueOf ( src ))
fmt . Println ( n ) // Väljund: 5
fmt . Println ( dst ) // Väljund: [1 2 3 4 5]


}

Selles näites loome mõne täisarvuga lähtelõigu src ja src-ga sama pikkusega sihtlõigu dst. Seejärel kutsume välja reflektor.Copy(), et kopeerida väärtused src-st dst-sse ja printida kopeeritud elementide arv (n) ja dst-lõigu sisu.

peegeldama.DeepEqual() Funktsioon

Reflektorpaketi funktsiooni reflect.DeepEqual() kasutatakse kahe võrdsuse väärtuse võrdlemiseks. Sellel funktsioonil on kaks sisendparameetrit a ja b, mis mõlemad võivad olla mis tahes tüüpi väärtusega. Funktsioon tagastab tõene, kui a ja b on sügavalt võrdsed, mis tähendab, et nende aluseks olevad väärtused on rekursiivselt võrdsed. Vastasel juhul osutub see valeks.

Järgmine näide näitab, kuidas kasutada reflektorit.DeepEqual():

pakett peamine

importida (

'fmt'
'peegeldama'
)
func peamine () {
a := [] int { 1 , 2 , 3 }
b := [] int { 1 , 2 , 3 }
kui peegeldama . DeepEqual ( a , b ) {
fmt . Println ( 'a ja b on võrdsed' )
} muidu {
fmt . Println ( 'a ja b ei ole võrdsed' )
}


}

Selles näites loome kaks lõiku a ja b samade täisarvu väärtustega. Seejärel kutsume välja reflektoorse.DeepEqual(), et võrrelda a ja b võrdsuse jaoks ning printida tulemus.

peegelda.Swapper() Funktsioon

Reflektorpaketi funktsiooni reflect.Swapper() kasutatakse funktsiooni tagastamiseks, mis suudab lõigu elemente vahetada. See võtab ühe parameetri v, mis peab olema lõigu väärtus. Funktsioon tagastab funktsiooni, mis võtab kaks täisarvu parameetrit i ja j ning vahetab lõigu elemendid positsioonides i ja j.

Reflektor.Swapper() kasutamist saab demonstreerida järgmise näitega:

pakett peamine

importida (

'fmt'
'peegeldama'
)
func peamine () {
s := [] int { 1 , 2 , 3 , 4 , 5 }
vahetus := peegeldama . Vahetaja ( s )
vahetus ( 1 , 3 )
fmt . Println ( s ) // Väljund: [1 4 3 2 5]


}

Selles näites lõime mõne täisarvu väärtusega lõigu nimega s. Seejärel kutsume välja reflektor.Swapper(), et saada funktsioonivahetus, mis võib lõigu elemente vahetada. Kasutame vahetust s-lõigu positsioonides 1 ja 3 olevate elementide vahetamiseks ja tulemuse printimiseks.

peegeldama.TypeOf() Funktsioon

Reflektor.TypeOf() kasutatakse väärtuse tüübi saamiseks. See funktsioon aktsepteerib ühte parameetrit 'v', mis võib olla mis tahes tüüpi või mis tahes väärtusega. Funktsioon tagastab reflektor.Type väärtuse, mis tähistab väärtuse tüüpi.

Reflektor.TypeOf() kasutamist saab demonstreerida järgmise näitega:

pakett peamine

importida (

'fmt'
'peegeldama'
)
func peamine () {
oli x ujuk64 = 3 . 14
t := peegeldama . Tüüp ( x )
fmt . Println ( t ) // Väljund: float64


}

Selles näites loome float64 muutuja x väärtusega 3.14. Seejärel kutsume välja reflekteeri.TypeOf(), et saada x-i tüüp ja salvestada tulemus reflektorisse.Tüübi muutuja t. Trükime t väärtuse, milleks on float64.

peegeldama.ValueOf() Funktsioon

Reflektor.ValueOf() võib saada väärtuse peegeldamise.Väärtuse esituse. See võtab ühe parameetri v, mis võib olla mis tahes tüüpi väärtus. Funktsioon tagastab peegeldava väärtuse väärtuse, mis esindab sisendparameetri väärtust.

Reflektor.ValueOf() kasutamist saab demonstreerida järgmise näitega:

pakett peamine

importida (

'fmt'
'peegeldama'
)
func peamine () {
oli x ujuk64 = 3 . 14
sisse := peegeldama . ValueOf ( x )
fmt . Println ( sisse ) // Väljund: 3.14

}

Selles näites loome float64 muutuja x väärtusega 3.14. Seejärel kutsume välja reflektor.ValueOf(), et saada x-i peegeldava väärtuse esitus ja salvestada tulemus peegeldava väärtuse muutujas v. Trükime v väärtuse, mis on 3,14.

Peegelduspakett pakub lisaks mainitutele palju funktsioone ja need on vaid mõned näited. Kasutades reflekteerimispaketi pakutavaid funktsioone, saame luua koodi, mis töötab mis tahes tüüpi väärtustega, ilma et peaksime kompileerimise ajal tüüpi teadma.

Järeldus

Golangi refleksioon võimaldab programmil käitamise ajal uurida ja muuta andmestruktuure, tüüpe ja väärtusi. Seda rakendatakse peegeldamispaketi kaudu, mis pakub funktsioone tüüpide ja väärtuste kontrollimiseks ja nendega manipuleerimiseks. Peegeldus on eriti kasulik liidestega töötamisel, tundmatute tüüpidega või kui teil on vaja rakendada üldisi funktsioone. Selles artiklis käsitleti Golangi peegelduse põhitõdesid, sealhulgas peegeldamispaketti, peegeldamise tüüpi ja väärtust ning dünaamilist tüüpi ja väärtust.