✉️ Saņem šito visu e-pastā. Tā vietā, lai palaistu garām kaut ko no tā, ko es rakstu savā blogā, tagad vari pierakstīties un saņemt e-pastā visu, ko es te rakstu. Tas nav bieži.

← Uz sākumu

Golang

2022. gada 14. janvārī, 13 komentāri

Šis ieraksts ir tehnisks. Tas var būt par datoriem, programmēšanu, lodēšanu un tamlīdzīgām ne pārāk populārām lietām. Ja tevi šāds saturs neinteresē, droši vari to nelasīt.

Uzstājīgi sev stāstu, ka publicēts nenoslīpēts ieraksts ienes precīzi par 100% vairāk, nekā tas, kurš sēž draftos un gaida iedvesmu. Par pēdējo vēl sliktāks ir tas, kurš sēž galvā un tā kā ir nedaudz par garu tviterim, bet nav pavisam gatavs pašizdomātajam bloga standartam. Te rezultāts. Standarti tiek pārskatīti. Latiņas tiek nolaistas. Vairāk par to pašu naudu. Un tā tālāk. Cerēsim uz vēl rezultātiem nākotnē.

Kaspar, bloga ierakstam nav jābūt peer reviewed. Bet nu pie lietas.

Ja godīgi un līdz galam, tad nekad pat pa jokam nebiju apsvēris ķerties klāt un papētīt - kas tas Go tāds ir. Nedaudz acs iemesta, bet sabiedrības polarizēto uzskatu dēļ dziļāk līst vēlmes nebija. Vēl godīgāk sakot - mani vispār neinteresēja kompilējamas valodas.

Pagāja neilgs laiks (kādi pāris gadi :D), un pienāca brīdis, kad sakrita lietas tiktāl, ka ieinteresēja. Ar mani tā notiek - pofig, pofig, pofig, līdz beidzot all in. LOL. Ar māju takš bija tieši tāpat :D

Izskanējušā gada beigās, spēlējot gandrīz slaveno zvaigznīšu spēli, risināju visu iekš PHP (mani risinājumi ir atslepenoti), bet tīri priekšstata gūšanai pamocīju sevi arī ar Rust. Ar rūsu es nomocījos. Kādā brīdī sapratu, ka jāļauj visam nostāvēties un pēc dažiem mēnešiem jāturpina. Pa to laiku mūžizglītības programmas ietvaros pievērsos tam pašam Go.

Tangenciāla piezīme. Es nekad neesmu bijis sava koda pasaulē laidējs. Šis arī ir kaut kas, kam pārkāpu pāri.

Pārsteidzošā kārtā pēc pieciem vakariem un diviem Udemy kursiem, no kuriem pirmais (40h) bija mēsls, bet otrais (9h) bija lielisks, es attapos situācijā, ka man ir strādājošs nekur.lv avotu savācējs, kura uzrakstīšana notika daudz organiskāk un izprotamāk, nekā iepriekšējā Python versija. Skaidrs, ka vieglums, iespējams, nāk arī ar vispārējo pieredzi, bet sajūta bija diezgan jauka.

Respektīvi, valoda ir nonākusi manā rīku jostā (toolbelt). Bet par pašu valodu un pirmajiem iespaidiem.

Valoda ir ļoti vienkārša, tanī pat laikā ir koncepti, kuri man nāca lēnām. Vairāk gan sistēmu programmēšanas valoda, tāpēc jāzin šis tas, kuras Python vai PHP pasaulē nav pieņemts zināt. Piemēram, atmiņas pārvaldība, pointeri/adreses (kur, kad un vai vispār tos lietot),

Jā, tur ir jancīgas lietas un vietas. Varbūt dažas, kuras man iesēdušās visvairāk.

Interfeisi ir nedaudz ačgārns polimorfisms. Valodā nav objektorientēto konceptu, bet interfeisi ir riktīgi stilīgi. Pamatlietas saprast bija elementāri, bet kad pieķēros izpētīt reālo pielietojumu standarta bibliotēkās, sapratu, ka jārok vēl un rublītis vēl nav pilns.

Lai gan Go funkciju parametri tiek padoti by value, tas neattiecas uz reference types (tie gan kopš 2013. gada oficiāli neeksistē, bet mūs nepiečakarēt, mēs zinam). Tas var radīt nelielas ķibeles, ja nedomā līdzi.

Protams, lielā lieta, kura lika actiņām iemirdzēties, ir elegance, ar kuru varam ražot goroutines un ar tām komunicēt, izmantojot kanālus. Skaicka šis neatbrīvo tevi no pienākuma zināt, ko nozīmē sacensību nosacījumi (race conditions) un strupsaķeres (deadlocks). Termini no Elvisa.

Atmiņā noteikti paliek arī for cikli visam un range operatori. Vienu brīdi gan samulsu, ka scope sākas jau cikla deklarācijā. Tagad vairs nesaprotu, kas tieši tur man bija mulsinošs.

package main

func main() {
	q := 1
	r := []int{1, 2, 3}
    // ↓ inicializētais `q` ir cits `q`
	for _, q := range r {
		println(q)
	}
	println(q)
}

Nākamajā versijā būs generics, kas man it nemaz nepietrūka, bet tanī pašā Rust šis koncepts ir plaši izmantots.

Standartizēts "tavs kods satur arī dokumentāciju un piemērus" ir forši. Sākumā var šķist, ka tas nedaudz ierobežo, taču padzīvojot pa dokumentācijas lapām, izrādās, ka ne. Ja par dokumentāciju. Tā kā tā ir automātiski ģenerēta, var paļauties, ka vismaz oficiālajos avotos tā precīzi atspoguļo faktu, nevis vēsturi. Forši ir arī tas, ka go komūnā blogi nav sveša lieta. Ir milzum daudz dažādu pamācību. Ja nepielec no pirmā, tad nav jāpārlasa septiņas reizes. Ņem nākamo, kurš skaidro savādāk.

Integrētais testēšanas koncepts satur arī veiktspējas analīzes opcijas. Tas sākumā šķita lieki, bet eventuāli kļūst pašsaprotami.

Kļūdu apstrādes mehānisma neesamību speciāli atstāju kā pēdējo. Var iztikt. Nav obligāti. Argumentācija ir saprotama. Var gan nedaudz apjukt panic, recovery, fatal konceptos, bet pārlasot atkārtoti, viss nostājas tur, kur tam vieta.

Visīpatnējākais no visa uzzinātā, iespējams, bija noklusētās atsevišķi neinicializētu mainīgo vērtības, kuras katram tipam ir savas. Lai gan, nekur īsti nebija nepieciešamības pārbaudīt vai mainīgais nav definēts/inicializēts. Normāliem cilvēkiem laikam tas nav vajadzīgs :)

Kritika par to, ka garbage collection ieslēdzas un pie milzīgiem apjomiem var visu apsēdināt, neiztur kritiku. Ja nu tev kādreiz sanāks dzīvē nokļūt līdz tādai problēmai, tu to arī pratīsi atrisināt.

Laikam lielāko problēmu man radīja nespēja iebraukt go modules. Kāpēc man vajag moduļus, ja es negribu moduļus? Ko jūs no manis vsp grb? Un arī tas, kā šādos apstākļos dzīvot - kā kompilēt, kā palaist, kā organizēt failus. Arī šis community "standarts" sākumā nepalīdzēja, bet, kad iepazinos ar kaudzīti citu projektu, palīdzēja. Viss nāk ar laiku.

Es nevienu nedzenu tagad steigšus apgūt go. Katram savs. Man patika, tev varbūt elixir liek čurāt karstu. Kāds cits klusiņām smīkņā pie savas mehāniskās klaviatūras un pārraksta kārtējo populāro komandrindas rīku iekš rust,

Kaut kā tā izskatās nepabeigts posts :)

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar Tom

2022. gada 14. janvārī, plkst. 19:42

Man pēdējā laikā F# liek čurāt karstu :D. Manuprāt viselegantākā valoda ar daudzām tādām paradigmām, kas kodēšanu padara par baudu un kur viss liekas tik loģiski un saprotami, ka es brīnos kāpēc visas valodas nevar būt tādas :)... Bet katram savs, protams.

Gravatar Edijs

2022. gada 16. janvārī, plkst. 23:32

Pamatīgi iespurdzu par:

Kāds cits klusiņām smīkņā pie savas mehāniskās klaviatūras un pārraksta kārtējo populāro komandrindas rīku iekš rust

:)