Kas ir pārdomas Golangā

Kas Ir Pardomas Golanga



Reflection in Golang ļauj programmai pārbaudīt un modificēt datu struktūras, veidus un vērtības izpildes laikā. Tas nodrošina funkciju kopu, kas ļauj pārbaudīt jebkura mainīgā veidu un vērtību izpildes laikā, izveidot jaunus tipu gadījumus un modificēt esošo mainīgo vērtību. Šis raksts aptver dažādas Golang funkcijas atspoguļošanas pakotnē.

Satura rādītājs

Go ir statiski drukāta valoda, tāpēc mainīgā tipam ir jābūt zināmam kompilēšanas laikā. Tomēr dažos gadījumos var būt nepieciešams apstrādāt vērtības, kuru veidus nevar noteikt, kamēr programma nav izpildīta.







Piemēram, mums var būt nepieciešams uzrakstīt funkciju, kas var darboties ar dažāda veida argumentiem, vai arī mums var būt nepieciešams serializēt un deserializēt nezināmu veidu datus. Šeit Golangā tiek izmantots atstarojošais iepakojums.



Reflect Package in Go

Atspoguļošanas pakotne nodrošina funkciju kopu, kas ļauj mums pārbaudīt un manipulēt ar vērtībām izpildlaikā neatkarīgi no to veida. Izmantojot šīs funkcijas, mēs varam iegūt informāciju par jebkura mainīgā veidu un vērtību, izveidot jaunus tipu gadījumus un modificēt esošo mainīgo vērtību.



Atspoguļošanas pakete Golang satur divu veidu: Veids un vērtība. Tips apzīmē Go tipu, piemēram, int, virkni vai pielāgotu struktūru. Vērtība apzīmē noteikta veida vērtību, piemēram, 42 vai “sveiki”.





Atspoguļošanas pakotne nodrošina arī funkciju kopu, kas ļauj iegūt tipu un vērtības objektus no mainīgajiem. Piemēram, funkcija reflect.TypeOf() atgriež Type objektu, kas attēlo mainīgā veidu, savukārt funkcija reflect.ValueOf() dod vērtību objektu, kas parāda mainīgā vērtību.

Nākamajās sadaļās mēs izpētīsim dažas no reflektēšanas pakotnē bieži izmantotajām funkcijām.



atspoguļot.Kopēt() Funkcija

Atspoguļošanas pakotnes funkcija reflect.Copy() tiek izmantota, lai kopētu vienas slāņa vērtības citā slānī. Tam nepieciešami divi parametri dst un src, kuriem abiem ir jābūt slāņu vērtībām ar vienu un to pašu elementa tipu. Funkcija kopē vērtības no src slāņa dst slānī un atgriež nokopēto elementu skaitu.

Funkcija reflect.Copy() ir parādīta šādā piemērā:

iepakojums galvenais

imports (

'fmt'
'atspoguļot'
)
func galvenais () {
src := [] starpt { 1 , 2 , 3 , 4 , 5 }
dst := veidot ([] starpt , tikai ( src ))
n := atspoguļot . Kopēt ( atspoguļot . ValueOf ( dst ), atspoguļot . ValueOf ( src ))
fmt . Println ( n ) // Izvade: 5
fmt . Println ( dst ) // Izvade: [1 2 3 4 5]


}

Šajā piemērā mēs izveidojam avota šķēli src ar dažām veselu skaitļu vērtībām un galamērķa šķēli dst ar tādu pašu garumu kā src. Pēc tam mēs izsaucam reflekt.Copy(), lai kopētu vērtības no src uz dst un izdrukātu nokopēto elementu skaitu (n) un dst slāņa saturu.

atspoguļot.DeepEqual() Funkcija

Atspoguļošanas pakotnes funkcija reflect.DeepEqual() tiek izmantota, lai salīdzinātu divas vienādības vērtības. Šai funkcijai ir divi ievades parametri, kas ir a un b, kuriem abiem var būt jebkura veida vērtība. Funkcija atgriež patieso vērtību, ja a un b ir dziļi vienādas, kas nozīmē, ka to pamatā esošās vērtības ir rekursīvi vienādas. Pretējā gadījumā tas izrādās nepatiess.

Šajā piemērā parādīts, kā izmantot reflekt.DeepEqual():

iepakojums galvenais

imports (

'fmt'
'atspoguļot'
)
func galvenais () {
a := [] starpt { 1 , 2 , 3 }
b := [] starpt { 1 , 2 , 3 }
ja atspoguļot . DeepEqual ( a , b ) {
fmt . Println ( 'a un b ir vienādi' )
} cits {
fmt . Println ( 'a un b nav vienādi' )
}


}

Šajā piemērā mēs izveidojam divas šķēles a un b ar vienādām veselu skaitļu vērtībām. Pēc tam mēs izsaucam reflekt.DeepEqual(), lai salīdzinātu a un b vienlīdzībai un izdrukātu rezultātu.

atspoguļot.Swapper() Funkcija

Atspoguļošanas pakotnes funkcija reflect.Swapper() tiek izmantota, lai atgrieztu funkciju, kas var apmainīt slāņa elementus. Tam ir nepieciešams viens parametrs v, kam jābūt slāņa vērtībai. Funkcija atgriež funkciju, kas ņem divus veselus skaitļu parametrus, i un j, un apmaina šķēles elementus pozīcijās i un j.

Reflektora.Swapper() lietojumu var parādīt, izmantojot šādu piemēru:

iepakojums galvenais

imports (

'fmt'
'atspoguļot'
)
func galvenais () {
s := [] starpt { 1 , 2 , 3 , 4 , 5 }
mijmaiņa := atspoguļot . Mainītājs ( s )
mijmaiņa ( 1 , 3 )
fmt . Println ( s ) // Izvade: [1 4 3 2 5]


}

Šajā piemērā mēs izveidojām šķēli ar nosaukumu s ar dažām veselu skaitļu vērtībām. Pēc tam mēs izsaucam reflekt.Swapper(), lai iegūtu funkciju mijmaiņas funkciju, kas var apmainīt slāņa elementus. Mēs izmantojam swap, lai apmainītu elementus s šķēles 1. un 3. pozīcijā un izdrukātu rezultātu.

atspoguļot.TypeOf() funkcija

Atspoguļo.TypeOf() tiek izmantots, lai iegūtu vērtības veidu. Šī funkcija pieņem vienu parametru “v”, kas var būt jebkura veida vai vērtības. Funkcija atgriež reflekt.Type vērtību, kas apzīmē vērtības veidu.

Reflektor.TypeOf() lietojumu var parādīt, izmantojot šādu piemēru:

iepakojums galvenais

imports (

'fmt'
'atspoguļot'
)
func galvenais () {
bija x pludiņš64 = 3 . 14
t := atspoguļot . TypeOf ( x )
fmt . Println ( t ) // Izvade: float64


}

Šajā piemērā mēs izveidojam float64 mainīgo x ar vērtību 3.14. Pēc tam mēs izsaucam reflekt.TypeOf(), lai iegūtu x veidu un saglabātu rezultātu reflektā.Tipa mainīgo t. Mēs izdrukājam t vērtību, kas ir float64.

atspoguļot.ValueOf() Funkcija

Atspoguļo.Vērtība() var iegūt vērtības atspoguļojumu.Vērtība. Tam nepieciešams viens parametrs v, kas var būt jebkura jebkura veida vērtība. Funkcija atgriež reflekt.Vērtības vērtību, kas apzīmē ievades parametra vērtību.

Reflektora.ValueOf() lietojumu var parādīt, izmantojot šādu piemēru:

iepakojums galvenais

imports (

'fmt'
'atspoguļot'
)
func galvenais () {
bija x pludiņš64 = 3 . 14
iekšā := atspoguļot . ValueOf ( x )
fmt . Println ( iekšā ) // Rezultāts: 3.14

}

Šajā piemērā mēs izveidojam float64 mainīgo x ar vērtību 3.14. Pēc tam mēs izsaucam reflekt.ValueOf(), lai iegūtu x atspoguļotās vērtības attēlojumu un saglabātu rezultātu atspoguļotās vērtības mainīgajā v. Mēs izdrukājam v vērtību, kas ir 3,14.

Atspoguļošanas pakotne nodrošina daudzas funkcijas, kas nav minētas, un šie ir tikai daži piemēri. Izmantojot reflektēšanas pakotnes sniegtās funkcijas, mēs varam izveidot kodu, kas var darboties ar jebkura veida vērtībām, kompilācijas laikā nav jāzina tips.

Secinājums

Reflection in Golang ļauj programmai pārbaudīt un modificēt datu struktūras, veidus un vērtības izpildes laikā. Tas tiek ieviests, izmantojot reflektēšanas pakotni, kas nodrošina veidu un vērtību pārbaudes un manipulācijas funkcijas. Pārdomas ir īpaši noderīgas, strādājot ar saskarnēm, nezināmiem veidiem vai ja nepieciešams ieviest vispārīgas funkcijas. Šajā rakstā tika apspriesti Golang refleksijas pamati, tostarp atspoguļošanas pakotne, atspoguļošanas veids un vērtība, kā arī dinamiskais veids un vērtība.