Apakah Refleksi di Golang

Apakah Refleksi Di Golang



Refleksi dalam Golang membenarkan program untuk memeriksa dan mengubah suai struktur, jenis dan nilai data pada masa jalan. Ia menyediakan satu set fungsi yang membolehkan kami memeriksa jenis dan nilai mana-mana pembolehubah pada masa jalan, mencipta contoh jenis baharu dan mengubah suai nilai pembolehubah sedia ada. Artikel ini merangkumi fungsi Golang yang berbeza dalam pakej mencerminkan.

Isi kandungan

Go ialah bahasa yang ditaip secara statik jadi jenis pembolehubah mesti diketahui pada masa penyusunan. Walau bagaimanapun, dalam senario tertentu, ia mungkin perlu untuk mengendalikan nilai yang jenisnya tidak dapat ditentukan sehingga program dilaksanakan.







Sebagai contoh, kita mungkin perlu menulis fungsi yang boleh berfungsi dengan pelbagai jenis hujah, atau kita mungkin perlu mensiri dan menyahsiri data jenis yang tidak diketahui. Di sinilah pakej mencerminkan digunakan di Golang.



Pakej Reflect dalam Go

Pakej mencerminkan menyediakan satu set fungsi yang membolehkan kami memeriksa dan memanipulasi nilai pada masa jalan, tanpa mengira jenisnya. Dengan fungsi ini, kita boleh mendapatkan maklumat tentang jenis dan nilai mana-mana pembolehubah, mencipta contoh jenis baharu dan mengubah suai nilai pembolehubah sedia ada.



Pakej reflect di Golang mengandungi dua jenis: Jenis dan Nilai. Jenis mewakili jenis Pergi, seperti int, rentetan atau struct tersuai. Nilai mewakili nilai jenis tertentu, seperti 42 atau 'hello'.





Pakej mencerminkan juga menyediakan satu set fungsi yang membolehkan kita mendapatkan objek Jenis dan Nilai daripada pembolehubah. Contohnya, fungsi reflect.TypeOf() mengembalikan objek Type yang mewakili jenis pembolehubah, manakala fungsi reflect.ValueOf() memberikan objek Value yang menunjukkan nilai pembolehubah.

Dalam bahagian berikut, kami akan meneroka beberapa fungsi yang biasa digunakan dalam pakej reflect.



reflect.Fungsi Salin().

Fungsi reflect.Copy() bagi pakej reflect digunakan untuk menyalin nilai satu kepingan ke dalam kepingan lain. Ia memerlukan dua parameter, dst dan src, yang kedua-duanya mestilah nilai hirisan dengan jenis elemen yang sama. Fungsi menyalin nilai dari kepingan src ke dalam kepingan dst dan mengembalikan bilangan elemen yang telah disalin.

Fungsi reflect.Copy() ditunjukkan dalam contoh berikut:

pakej utama

import (

'fmt'
'renungkan'
)
fungsi utama () {
src := [] int { 1 , 2 , 3 , 4 , 5 }
dst := buat ([] int , sahaja ( src ))
n := merenung . Salinan ( merenung . Nilai ( dst ), merenung . Nilai ( src ))
fmt . Println ( n ) // Output: 5
fmt . Println ( dst ) // Output: [1 2 3 4 5]


}

Dalam contoh ini, kami mencipta hirisan sumber src dengan beberapa nilai integer dan hirisan destinasi dst dengan panjang yang sama dengan src. Kami kemudian memanggil reflect.Copy() untuk menyalin nilai dari src ke dst dan mencetak bilangan elemen yang telah disalin (n) dan kandungan kepingan dst.

reflect.Fungsi DeepEqual().

Fungsi reflect.DeepEqual() bagi pakej reflect digunakan untuk membandingkan dua nilai untuk kesamaan. Fungsi ini mempunyai dua parameter input iaitu a dan b, kedua-duanya boleh daripada sebarang nilai dari sebarang jenis. Fungsi mengembalikan benar jika a dan b sangat sama, bermakna nilai asasnya adalah sama secara rekursif. Jika tidak, ia ternyata palsu.

Contoh berikut menunjukkan cara menggunakan reflect.DeepEqual():

pakej utama

import (

'fmt'
'renungkan'
)
func utama () {
a := [] int { 1 , 2 , 3 }
b := [] int { 1 , 2 , 3 }
jika merenung . DeepEqual ( a , b ) {
fmt . Println ( 'a dan b adalah sama' )
} lain {
fmt . Println ( 'a dan b tidak sama' )
}


}

Dalam contoh ini, kami mencipta dua keping a dan b dengan nilai integer yang sama. Kami kemudian memanggil reflect.DeepEqual() untuk membandingkan a dan b untuk kesamaan dan mencetak hasilnya.

reflect.Swapper() Fungsi

Fungsi reflect.Swapper() bagi pakej reflect digunakan untuk mengembalikan fungsi yang boleh menukar elemen kepingan. Ia memerlukan satu parameter, v, yang mestilah nilai hirisan. Fungsi mengembalikan fungsi yang mengambil dua parameter integer, i dan j, dan menukar elemen hirisan pada kedudukan i dan j.

Penggunaan reflect.Swapper() boleh ditunjukkan melalui contoh berikut:

pakej utama

import (

'fmt'
'renungkan'
)
func utama () {
s := [] int { 1 , 2 , 3 , 4 , 5 }
bertukar-tukar := merenung . Penukar ( s )
bertukar-tukar ( 1 , 3 )
fmt . Println ( s ) // Output: [1 4 3 2 5]


}

Dalam contoh ini, kami mencipta kepingan bernama s dengan beberapa nilai integer. Kami kemudian memanggil reflect.Swapper() untuk mendapatkan pertukaran fungsi yang boleh menukar elemen kepingan. Kami menggunakan swap untuk menukar elemen pada kedudukan 1 dan 3 kepingan s dan mencetak hasilnya.

reflect.TypeOf() Function

Refleksi.TypeOf() digunakan untuk mendapatkan jenis nilai. Fungsi ini menerima satu parameter 'v' yang boleh daripada sebarang jenis atau nilai. Fungsi mengembalikan nilai reflect.Type yang mewakili jenis nilai.

Penggunaan reflect.TypeOf() boleh ditunjukkan melalui contoh berikut:

pakej utama

import (

'fmt'
'renungkan'
)
fungsi utama () {
adalah x terapung64 = 3 . 14
t := merenung . Jenis ( x )
fmt . Println ( t ) // Output: float64


}

Dalam contoh ini, kami mencipta pembolehubah float64 x dengan nilai 3.14. Kami kemudian memanggil reflect.TypeOf() untuk mendapatkan jenis x dan menyimpan hasilnya dalam reflect.Type variable t. Kami mencetak nilai t, iaitu float64.

reflect.ValueOf() Fungsi

Refleksi.ValueOf() boleh mendapatkan representasi reflect.Value bagi sesuatu nilai. Ia memerlukan satu parameter v, yang boleh menjadi sebarang nilai dari sebarang jenis. Fungsi mengembalikan nilai reflect.Value yang mewakili nilai parameter input.

Penggunaan reflect.ValueOf() boleh ditunjukkan melalui contoh berikut:

pakej utama

import (

'fmt'
'renungkan'
)
fungsi utama () {
adalah x terapung64 = 3 . 14
dalam := merenung . Nilai ( x )
fmt . Println ( dalam ) // Output: 3.14

}

Dalam contoh ini, kami mencipta pembolehubah float64 x dengan nilai 3.14. Kami kemudian memanggil reflect.ValueOf() untuk mendapatkan perwakilan nilai pantulan bagi x dan menyimpan hasilnya dalam pembolehubah nilai pantulan v. Kami mencetak nilai v, iaitu 3.14.

Pakej mencerminkan menyediakan banyak fungsi di luar yang disebutkan, dan ini hanyalah beberapa contoh. Dengan menggunakan fungsi yang disediakan oleh pakej mencerminkan, kita boleh mencipta kod yang boleh berfungsi dengan nilai apa-apa jenis, tanpa perlu mengetahui jenis pada masa penyusunan.

Kesimpulan

Refleksi dalam Golang membolehkan program untuk memeriksa dan mengubah suai struktur data, jenis dan nilai pada masa jalan. Ia dilaksanakan melalui pakej mencerminkan, yang menyediakan fungsi untuk memeriksa dan memanipulasi jenis dan nilai. Refleksi amat berguna apabila bekerja dengan antara muka, jenis yang tidak diketahui atau apabila anda perlu melaksanakan fungsi generik. Artikel ini membincangkan asas pantulan di Golang, termasuk pakej pantulan, Jenis dan Nilai mencerminkan serta jenis dan nilai dinamik.