Golang Generics piemēri

Golang Generics Piemeri



Golang vispārīgā funkcija ļauj izveidot atkārtoti lietojamu kodu, kas ir drošs un saderīgs ar plašu veidu klāstu. Par laimi, ģenērisko zāļu pievienošana Go paver jaunas iespējas koda atkārtotai izmantošanai un elastībai. Jaunākā Golang versija nodrošina ļoti gaidīto ģenērisko zāļu atbalstu.

Vēl svarīgāk ir tas, ka ģenēriskās zāles saglabā Go spēcīgo tipa drošību, kas ļauj veikt statisku tipa pārbaudi kompilēšanas laikā un nodrošina tipa pareizību. Tie nodrošina standartizētu kļūdu apstrādi vispārējā kodā, kas uzlabo skaidrību un apkopi. Turklāt tie nodrošina standartizētu kļūdu apstrādi vispārējā kodā, kas uzlabo skaidrību un apkopi. Šajā ziņojumā mēs apskatīsim vairākas reālās pasaules Go vispārīgās lietojumprogrammas un piemērus.

1. piemērs: Golang vispārīgās funkcijas izmantošana

Viens no primārajiem ģenērisko zāļu lietošanas gadījumiem ir tādu funkciju izveide, kuras var darboties ar dažādiem veidiem. Šeit ir viens no piemēriem, kur tiek izmantota vispārējā apkārtmēra funkcija.







iepakojums galvenais
imports 'fmt'
func apkārtmērs [ r starpt | pludiņš32 ]( rādiuss r ) {
c := 3 * 2 * rādiuss
fmt . Println ( 'Vispārējais apkārtmērs ir: , c )
}
func galvenais () {
bija r1 starpt = 7
bija r2 pludiņš32 = 7 . 5
apkārtmērs ( r1 )
apkārtmērs ( r2 )
}

Iepriekšējā koda sākumā rinda importē “fmt” pakotni, kas nodrošina funkcijas formatētam I/O, ieskaitot izvades drukāšanu uz konsoli. Pēc tam mēs definējam vispārīgu funkciju ar nosaukumu “apkārtmērs”, kas ņem vispārīga tipa “r” parametra rādiusu, kas var būt “int” vai “float32”. Funkcijā tas aprēķina apkārtmēru, reizinot rādiusu ar konstanto vērtību “3” un pēc tam reizinot to ar “2”. Visbeidzot, tas izdrukā aprēķināto apkārtmēru, izmantojot “fmt.Println”.



Tālāk mums ir galvenā funkcija, kurā tiek deklarēti divi mainīgie, r1 un r2, un tiem tiek piešķirtas attiecīgi vērtības 7 un 7,5. Pēc tam divreiz tiek izsaukta funkcija “apkārtmērs”, kā argumentus nododot r1 un r2.



Izvade parāda aprēķinu, izdrukājot apļu apkārtmērus šādi:





2. piemērs: Golang vispārīgā interfeisa izmantošana

Turklāt Golang vispārīgie medikamenti palīdz mums ar to saskarnēm. Go saskarnes ir būtisks rīks, lai atvieglotu koda atkārtotu izmantošanu un polimorfismu. Ļaujot tiem darboties ar daudziem veidiem, vispārīgie līdzekļi palielina saskarņu jaudu. Šis ir Golang vispārīgās saskarnes pirmkods:



iepakojums galvenais
imports 'fmt'
veids EmpAge saskarne {
int64 | int32 | pludiņš32 | pludiņš64
}
func jaunsGenericFunc [ vecums Vecums ]( emp_Vecums vecums ) {
val := starpt ( emp_Vecums ) + 1
fmt . Println ( val )
}
func galvenais () {
fmt . Println ( 'Darbinieku vecums' )
bija Vecums1 int64 = 24
bija Vecums2 pludiņš64 = 25 . 5
jaunsGenericFunc ( Vecums1 )
jaunsGenericFunc ( Vecums2 )
}

Iepriekšējā pirmkodā mēs definējām saskarni ar nosaukumu “EmpAge”, kas norāda iespējamos veidus atbilstoši darbinieka vecumam. Interfeiss ietver int64, int32, float32 un float64 tipus. Šī saskarne ļauj funkcijai “vispārējā” pieņemt jebkuru no šiem veidiem kā argumentu. Pēc tam mēs izmantojam vispārīgu funkciju ar nosaukumu newGenericFunc, kas ņem emp_Age parametru vispārīgam vecuma veidam, kas var būt jebkura veida, kas atbilst EmpAge interfeisam. Funkcijā tas pārvērš emp_Age par int un palielina to par 1, kā parādīts attēlā.

Tālāk mēs deklarējam divus mainīgos, Vecums1 un Vecums2, un galvenajā funkcijā piešķiram vērtības attiecīgi 24 un 25,5. Pēc tam Age1 un Age2 tiek nodoti kā parametri funkcijai newGenericFunc, kas tiek izpildīta divreiz. Tādējādi vecums tiek palielināts par 1 un tiek ģenerētas atjauninātās vērtības.

Tālāk sniegtā izvade ir vecums no vispārējās funkcijas, kas izmanto saskarni:

3. piemērs: Golang vispārīgās datu struktūras izmantošana

Turklāt Go generics sniedz mums iespēju izveidot vispārīgas datu struktūras, piemēram, steku, rindas un saistītos sarakstus. Apsveriet vispārīgās steka ieviešanu tālāk norādītajos gadījumos.

imports 'fmt'
veids Kaudze [ T jebkura ] [] T
func ( st * Kaudze [ T ]) Spiediet ( vienums T ) {
st = pievienot ( * st , lieta )
}
func ( st * Kaudze [ T ]) Pop () T {
ja tikai ( * st ) == 0 {
panika ( 'Nothing in Stack' )
}
rādītājs := tikai ( * st ) - 1
lieta := ( * st )[ rādītājs ]
* st = ( * st )[: rādītājs ]
atgriezties lieta
}
func galvenais () {
kaudze := jauns ( Kaudze [ starpt ])
kaudze . Spiediet ( 1 )
kaudze . Spiediet ( 2 )
kaudze . Spiediet ( 3 )
fmt . Println ( kaudze . Pop ())
fmt . Println ( kaudze . Pop ())
fmt . Println ( kaudze . Pop ())
}

Iepriekšējā kodā ir definēts vispārējs tips ar nosaukumu “Steck”, kas apzīmē steks. Vietturis “T” ļauj kaudzē ievietot jebkura veida elementus. Tips “Steck” tiek realizēts kā “T” tipa elementu daļa. Šeit “Stack” tipam ir izvietotas divas funkcijas: “Push” un “Pop”. Funkcija Push() ir atbildīga par elementu pievienošanu kaudzei. Tas izmanto “T” tipa argumenta vienumu un pievieno to pamatā esošajai šķēlei, izmantojot funkciju append ().

Kamēr funkcija Pop() paņem sākotnējo komponentu no steka un atgriež to, tā vispirms nosaka, vai steks ir tukšs, novērtējot pamatā esošās daļas lielumu. Kļūdas paziņojums tiek nosūtīts, ja šķiet, ka kaudze ir tukša, kas izraisa paniku. Pretējā gadījumā tas izgūst pēdējo elementu no sadaļas, noņem to no kaudzes, sagriežot daļu līdz otrajam līdz pēdējam elementam, un atgriež noņemto vienumu.

Pēc tam jaunā veselo skaitļu kaudze tiek izveidota, izmantojot sintaksi Stack[int] šī koda galvenajā funkcijā. Pēc tam trīs reizes tiek izsaukta metode “Push”, lai stekam pievienotu veselus skaitļus 1, 2 un 3. Tomēr “Pop” metode tiek izsaukta trīs reizes pēc tam, lai izgūtu un izdrukātu elementus no kaudzes.

Šī izvade norāda, ka elementi tiek izņemti no kaudzes apgrieztā secībā:

4. piemērs: Golang vispārējo ierobežojumu izmantošana

Go piedāvā arī pielāgotus ierobežojumus, kas nodrošina lielu elastību un nosaka īpašas prasības vispārīgām konstrukcijām, pamatojoties uz to lietojumprogrammu vajadzībām. Pielāgoto vispārīgo ierobežojumu kods ir sniegts tālāk norādītajā demonstrācijā.

iepakojums galvenais
imports 'fmt'
veids Skaitļi saskarne {
int64 | pludiņš64
}
func galvenais () {
FloatValue := [] pludiņš64 { 2 . 0 , 4 . 0 , 6 . 0 , 8 . 0 , 10 . 0 }
IntegerValue := [] int64 { 2 , 4 , 6 , 8 , 10 }
summa1 := vispārīgāSumma ( FloatValue )
summa2 := vispārīgāSumma ( IntegerValue
fmt . Println ( 'Sum of float64 :' , summa1 )
fmt . Println ( 'Sum of int64 :' , summa2 )

}
func vispārīgāSumma [ n Skaitļi ]( cipariem [] n ) n {
bija Es esmu n
priekš _ , uz viena := diapazons cipariem {
summa += uz viena
}
atgriezties summa
}

Iepriekšējā avota kodā mēs definējam skaitļu saskarni ar metodi “Summa”. Pēc tam mēs izveidojam divus pielāgotus veidus — “FloatValue” un “IntegerValue”, kas ievieš skaitļu saskarni, nodrošinot attiecīgās “Sum” metodes. Funkcija genericSum tagad var pieņemt jebkura veida šķēles, kas atbilst skaitļu saskarnei. Funkcijā mēs atkārtojam elementus un izsaucam metodi “Summa”, lai aprēķinātu summu. Visbeidzot, galvenajā funkcijā mēs izveidojam FloatValue un IntegerValue daļas un nododam tās funkcijai genericSum(), kas pareizi aprēķina elementu summu katrā slānī.

Paredzamā izvade tagad ir redzama šādā ekrānā:

Secinājums

Mēs izpētījām dažus praktiskus Go ģenērisko datu piemērus, kas ietver vispārīgas datu struktūras un vispārīgas funkcijas izveidi, vispārīgas saskarnes definēšanu un pielāgotā tipa ierobežojumu izmantošanu. Šie piemēri parāda jaudu un elastību, ko ģenēriskie līdzekļi sniedz Go programmēšanas valodai. Ņemiet vērā, ka vispārīgā koda ģenerēšana kompilācijas laikā nodrošina efektīvu bināro izmēru un kompilācijas laiku.