Ang Go ay isang kasabay, pinagsama-samang programming language na may static na pag-type na inspirasyon ng C syntax.
Ang bagong bersyon ng Go 1.22 ay darating anim na buwan pagkatapos ng bersyon 1.21, na may ilang kapansin-pansing pagbabago sa toolset, runtime, mga pagpapabuti sa optimization, mga pagpapahusay sa compiler, at mga library.
Para sa mga hindi pamilyar sa Go, dapat kong banggitin na ito ay isang programming language na binuo ng Google na may pakikilahok ng komunidad bilang isang hybrid solution na pinagsasama ang mataas na performance ng mga compiled language na may mga bentahe tulad ng scripting language, tulad ng kadalian sa pagsulat ng code, bilis ng pag-develop, at proteksyon laban sa error.
Pumunta sa 1.22 pangunahing balita
Sa bagong bersyong ito, na ipinakilala mula sa Go 1.22, dalawang pagbabago sa mga "for" loop ang kapansin-pansin . Dati, ang mga variable na idineklara ng isang "for" loop ay nilikha nang isang beses at ina-update sa bawat iteration. Sa Go 1.22, ang bawat iteration ng loop ay lumilikha ng mga bagong variable upang maiwasan ang mga hindi sinasadyang error sa pagbabahagi. Bukod pa rito , idinagdag ang experimental support (GOEXPERIMENT=rangefunc) para sa mga range function sa mga "for" loop, na nagpapahintulot sa isang function na matukoy bilang isang iterator. Nalutas din ang isang matagal nang problema sa mga "for" loop na naging sanhi ng mga coroutine call na magbahagi ng mga loop variable sa pagitan ng mga iteration . Bukod pa rito, ang mga "for" loop ay maaari na ngayong mag-iterate sa mga integer. Halimbawa:
package main import "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 take off!") }
Isa pang kapansin-pansing pagbabago sa bagong bersyong ito ay ang pagpapakilala ng kakayahang gumamit ng direktoryong " vendor " na naglalaman ng mga dependency sa workspace. Maaari nang gamitin ng mga command ang direktoryong ito, na nilikha gamit ang ` go work vendor` at ginagamit sa mga build command kapag ang ` -mod` ay nakatakda sa " vendor ," na siyang default kapag mayroong direktoryong " vendor " sa workspace.
Mahalagang tandaan na ang functionality na ` go get` ay hindi na sinusuportahan sa labas ng isang module sa legacy GOPATH mode. Gayunpaman, ang iba pang mga build command tulad ng `go build` at `go test` ay patuloy na gagana nang walang katiyakan para sa mga legacy na programa ng GOPATH. Bukod pa rito, ang command na `go mod init` ay hindi na susubukang mag-import ng mga kinakailangan sa module mula sa mga configuration file ng iba pang mga tool ng vendor (tulad ng Gopkg.lock).
Ipinakikilala ng Go 1.22 ang isang bagong io/unsafe package na nagbibigay ng functionality para sa pagtatrabaho gamit ang mga pointer at unsafe memory . Nag-aalok ang package na ito ng mga paraan para sa pag-convert ng mga pointer mula sa ligtas patungo sa hindi ligtas na mga uri, pati na rin para sa pagsasagawa ng mga operasyon sa pagkopya ng memorya nang walang pag-check ng mga hangganan.
Nagpatuloy ang trabaho sa pagsasama ng mga pag-optimize ng compiler batay sa mga resulta ng PGO code profiling. Gumagamit na ngayon ang compiler ng mga tool sa devirtualization upang palitan ang mga hindi direktang tawag mula sa iba't ibang pamamaraan ng pagpapatupad ng mga pinalawak na inline block. Nang pinagana ang PGO, pinahusay ng pagbabagong ito ang pagganap ng karamihan sa mga programa sa pagitan ng 2% at 14%.
Sa bersyong Windows ng Go, ang mga programang nagli-link o naglo-load ng mga Go library na ginawa gamit ang -buildmode=c-archive o -buildmode=c-shared ay maaari na ngayong gumamit ng Windows Event Logging (ETW) API sa pamamagitan ng mga bagong runtime/trace at tracehook package , na nagpapatupad ng Go event trace collection protocol bilang isang ETW provider.
Sa iba pang mga pagbabago na namumukod-tangi:
- Ang utos pumunta sa pagsubok -cover ngayon ay nagpi-print ng mga buod ng saklaw para sa mga sakop na pakete na walang sariling mga test file.
- os/exec, ang kakayahang tukuyin ang mga katangian ng konteksto ay idinagdag, na nagbibigay-daan sa iyong magtakda ng mga halaga tulad ng gumaganang direktoryo, mga variable ng kapaligiran, at input/output file descriptor para sa mga naisagawang command.
- Na-optimize na pamamahala ng memory sa runtime, na nagreresulta sa 1% hanggang 3% na pagtaas ng pagganap at 1% na pagbawas sa pagkonsumo ng memory para sa karamihan ng mga application.
- El paquete net/http, naidagdag na ang function CloseIdleConnections sa HTTP client, na nagsasara ng lahat ng idle na koneksyon na kamakailang ginamit ng kliyente
- Ang isang pinahusay na pang-eksperimentong pagpapatupad (GOEXPERIMENT=newinliner) ng mekanismo ng pagpasok ng tawag ay idinagdag sa compiler, na gumagamit ng heuristics upang paghiwalayin ang mahahalagang operasyon mula sa mga hindi mahalaga.
- Naidagdag ang package » matematika/rand/v2 » sa karaniwang library, na nag-aalok ng mas pare-parehong API at gumagamit ng mas mabilis na mga algorithm upang bumuo ng mga pseudorandom na numero.
- El paquete net/http.ServeMux Idinagdag ang kakayahang tukuyin ang mga pamamaraan at mask sa mga template.
Panghuli, kung interesado kang matuto nang higit pa, makikita mo ang mga detalye sa sumusunod na link.