Go тилинин жаңы релизи, 1.24 версиясы алты айдан кийин чыгат Go 1.23. Көпчүлүк өзгөртүүлөр инструменттердин тизмегин, иштөө убактысын жана китепканаларды ишке ашырууда. Адаттагыдай эле, релиз камсыз кылат шайкештикти убада кылуу Go 1. Тилдин дизайнерлери дээрлик бардык Go программалары мурункудай эле компиляцияланып, иштей берет деп күтүшөт.
Тилдеги өзгөрүүлөр
Go 1.24 азыр толугу менен колдойт жалпы типтеги лакап аттар: түр лакап атын жарыяланган тип катары параметрлештирүү мүмкүн. Толук маалымат тил спецификациялары. Азырынча бул функцияны GOEXPERIMENT=noaliastypeparams коюу менен өчүрсө болот; Бирок, aliastypeparams опциясы Go 1.25те алынып салынат.
аспаптар
Буйрук бар
Go модулдары эми go.mod ичиндеги инструмент директивасын колдонуу менен аткарылуучу көз карандылыктарды көзөмөлдөй алат. Бул, адатта, "tools.go" деп аталган файлга бош импорт катары куралдарды кошуунун мурунку чечүүчү жолун жок кылат. Go курал буйругу эми Go менен келген куралдарга кошумча бул куралдарды иштете алат. Көбүрөөк маалыматты төмөнкү жерден тапса болот документтер.
Go get үчүн жаңы -tool желеги талап кылынган директиваларды кошуудан тышкары, көрсөтүлгөн пакеттер үчүн учурдагы модулга курал директивалары кошулат.
жаңы мета-үлгү куралы учурдагы модулдун бардык куралдарын билдирет. Бул алардын бардыгын go get куралы аркылуу жаңыртуу үчүн же go install куралы аркылуу GOBIN каталогуңузга орнотуу үчүн колдонсо болот.
Go run аркылуу түзүлгөн аткарылуучу файлдар жана жаңы go инструментинин жүрүм-туруму азыр Go куруу кэшинде кэштелген. Бул кэштин көбөйгөндүгүнө байланыштуу кайталап ишке киргизүүгө мүмкүндүк берет. #69290.
Go build and go install командалары эми -json желегин кабыл алат, ал стандарттык чыгарууда структураланган JSON чыгаруусу катары курулуштун жыйынтыгын жана каталарды билдирет. Форматтын чоо-жайын go help buildjson бөлүмүнөн көрүүгө болот.
Андан тышкары, go test -json эми JSON тестинин натыйжасы менен аралашып, JSONде түзүлүүчү каталар жөнүндө отчет берет. Аларды жаңы Action түрлөрү менен айырмалоого болот, бирок алар тесттик интеграция тутумунда көйгөйлөрдү жаратса, сиз түзүүнүн текстинин чыгышына кайра түшө аласыз GODEBUG орнотуу gotestjsonbuildtext=1.
Жаңы GOAUTH чөйрө өзгөрмөлөрү жеке модулдарды тартууга уруксат берүүнүн ийкемдүү жолун камсыз кылат. Чоо-жайын go help goauth бөлүмүнөн көрө аласыз.
Go build буйругу азыр орнотулду негизги модулдун версиясы теги жана/же версияны башкаруу милдеттенмесинин негизинде түзүлгөн бинардык системада. + кир суффикс эгер аткарылбаган өзгөртүүлөр болсо, кошулат. -buildvcs=false желек экиликтен версияны башкаруу маалыматын алып салуу үчүн колдонулушу мүмкүн.
жаңы GODEBUG орнотуу toolchaintrace=1 азыр go командасында инструменттердин тизмегин тандоо процессине көз салуу үчүн колдонсо болот.
Cgo
Cgo иштөө убактысынын иштешин жакшыртуу үчүн C функциялары үчүн жаңы аннотацияларды колдойт. #cgo noescape cFunctionName компиляторго C функциясына өткөн эстутум cFunctionName качып кетпей турганын айтат. #cgo nocallback cFunctionName компиляторго C функциясы cFunctionName эч кандай Go функцияларын кайра чакырбай турганын айтат. Көбүрөөк маалыматты төмөнкү жерден тапса болот cgo документтери.
Cgo учурда бир нече туура келбеген декларациялары бар C функциясына чалууларды компиляциялоодон баш тартат. Мисалы, эгерде f f(int) жана void f(double) деп жарыя кылынса, cgo f(0) жараксыз чакыруу ырааттуулугун жаратуунун ордуна ката жөнүндө кабарлайт. Бул релиздеги жаңылыктар, башка файлдарда туура келбеген декларациялар пайда болгондо, бул ката абалын жакшырткан. #67699.
Objdump
Objdump куралы азыр 64-бит LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) жана S390X (GOARCH=s390x) боюнча демонтаждоону колдойт.
Vet
Жаңы тесттер анализатору туура эмес түзүлгөн аттар, жараксыз кол тамгалар же жок идентификаторлорду документтештирген мисалдар сыяктуу тесттик, fuzzer, эталондук жана үлгү декларацияларындагы жалпы каталарды кабарлайт. Бул каталардын айрымдары сыноолордун ишке ашпай калышына алып келиши мүмкүн.
Учурдагы printf талдоочу азыр fmt.Printf(s) формасындагы чалуулардын диагностикасын кабарлайт, мында s башка аргументтери жок туруктуу эмес формат саптары. Мындай чалуулар дээрлик дайыма ката болуп саналат, анткени s мааниси % белгисин камтышы мүмкүн; анын ордуна fmt.Print колдонуңуз. 60529. Бул текшерүү учурдагы коддон нерселерди табууга умтулат, ошондуктан тил версиясы (go.mod файлынын go директивасында же `//go:build` комментарийлеринде көрсөтүлгөндөй) Go 1.24 куралдар чынжырына жаңыртууда узак интеграциялык тыныгууларга жол бербөө үчүн кеминде Go 1.24 болгондо гана колдонулат.
Учурдагы куруу теги анализатору эми туура эмес курулуш теги болгондо диагностиканы кабарлайт эски версия куруу чектөө //go:build директивасына өтүңүз. Мисалы, //go:build go1.23.1 чекит чыгарууну билдирет; анын ордуна //go:build go1.23 колдонуңуз. #64127.
Учурдагы копилоктоп анализатору эми өзгөрмө үчтүк “for” циклинде жарыяланганда диагностиканы кабарлайт, мисалы for i := iter(); жасалган(i); i = кийинки(i) { … }, синхрондоштуруу.Мутекс сыяктуу синхрондоштурууну камтыйт. Go 1.22 мурунку итерациядан маанилерди көчүрүп, ар бир итерация үчүн жаңы өзгөрмө түзүү үчүн мындай циклдердин жүрүм-турумун өзгөрттү; Бул көчүрүү кулпулар үчүн коопсуз эмес. #66387.
ГОКАЧЕПРОГ
Ички cmd/go бинардык жана тесттик кэштөө механизми эми cmd/go куралы менен GOCACHEPROG чөйрө өзгөрмөсү менен аталган бала процессинин ортосунда JSON протоколун ишке ашыруучу бала процесстер тарабынан ишке ашырылышы мүмкүн. Буга чейин ал GOEXPERIMENT үчүн болчу. Протоколдун чоо-жайын көрүүгө болот документтер.
Аяктоо убактысы
Иштөө убактысынын бир нече өркүндөтүлүшү CPU ашыкча чыгымын бир катар репрезентативдик көрсөткүчтөр боюнча орточо 2-3% га кыскартты. Натыйжалар колдонмого жараша ар кандай болушу мүмкүн. Бул жакшыртуулар негизделген жаңы орнотулган картаны ишке ашырууну камтыйт Швед таблицалары, кичинекей объект эс тутумун натыйжалуураак бөлүштүрүү жана мутекстин жаңы ички иштөө убактысын ишке ашыруу.
Жаңы орнотулган картаны ишке ашыруу жана жаңы ички иштөө убактысынын мутексин GOEXPERIMENT=noswissmap жана GOEXPERIMENT=nospinbitmutex орнотуу убагында, тиешелүүлүгүнө жараша, өчүрүүгө болот.
Компилятор
Компилятор мурунтан эле cgo тарабынан түзүлгөн ресивер типтери менен жаңы ыкмаларды аныктоого тыюу салган, бирок бул чектөөнү түр лакап аты аркылуу айланып чыгууга мүмкүн болгон. Go 1.24 азыр ар дайым ката жөнүндө кабарлайт, эгерде кабыл алгыч түз же кыйыр түрдө (түр лакап аты аркылуу) cgo тарабынан түзүлгөн типти билдирсе.
Linker
Шилтемечи эми демейки боюнча ELF платформаларында GNU куруу идентификаторун (ELF кириши NT_GNU_BUILD_ID) жана macOSто UUIDди (Mach-O жүктөө буйругу LC_UUID) жаратат. Build ID же UUID Go build IDден алынган. Муну -B none шилтемелүү желекчеси менен өчүрсө болот же колдонуучу белгилеген он алтылык мааниси бар -B 0xNNNN байланыштыргыч желеги менен жокко чыгарса болот.
Жылдыруу
жылы айтылгандай Go 1.22 релиз эскертүүлөрү, Go 1.24 азыр орнотулушу үчүн Go 1.22.6 же андан кийинки версиясын талап кылат. Иштеп чыгуучулар Go 1.26 чыгаруу үчүн Go 1.24 же андан кийинки версиясын талап кылат деп күтүшөт.
Стандарттык китепкана
Каталог менен чектелген файл тутумуна кирүү
Жаңы түрү os.root Белгилүү бир каталогдун ичинде файл тутумунун операцияларын аткаруу мүмкүнчүлүгүн берет.
милдети os.OpenRoot каталогду ачат жана кайтарат os.root. Методдор күйүк os.root ошол каталогдо иштешет жана жолдордун каталогдон тышкаркы жерлерге, анын ичинде каталогдон тышкаркы символикалык шилтемелерди ээрчигендерге кайрылуусуна жол бербегиле. os.Root'догу ыкмалар OS топтомунда жеткиликтүү болгон файл тутумунун операцияларынын көбүн чагылдырат, анын ичинде, мисалы, os.Root.Open, os.Root.Create, os.Root.Mkdir и os.Root.Stat.
Жаңы эталондук өзгөчөлүк
Эталондор эми тезирээк, ката кетирбеген ыкманы колдоно алышат testing.B.Loop bN сыяктуу типтүү цикл структураларынын ордуна for b.Loop() { … } сыяктуу эталон боюнча кайталоо
- Эталондук функция -count үчүн так бир жолу аткарылат, ошондуктан кымбат орнотуу жана тазалоо кадамдары бир гана жолу аткарылат.
- Функцияны чакыруу параметрлери жана натыйжалары иштеп, компилятордун циклдин корпусун толугу менен оптималдаштыруусуна жол бербейт.
Жакшыртылган жыйынтыктоочулар
Жаңы өзгөчөлүк runtime.AddCleanup караганда ийкемдүү, натыйжалуу жана азыраак ката кетирүүчү бүтүрүү механизми runtime.SetFinalizer. AddCleanup объектке тазалоо функциясын тиркейт, ал объект жеткиликсиз болуп калганда иштетилет. Бирок, SetFinalizerтен айырмаланып, бир нече тазалоону бир объектке, тазалоону ички көрсөткүчтөргө туташтырса болот, объекттер цикл түзгөндө тазалоолор адатта агып кетпейт жана тазалоо объектинин же ал көрсөткөн объектилердин бөлүштүрүлүшүн кечеңдетпейт. Жаңы код SetFinalizer караганда AddCleanup'га артыкчылык бериши керек.
Жаңы алсыз пакет
Жаңы пакет начар алсыз көрсөткүчтөрдү камсыз кылат.
Алсыз көрсөткүчтөр - бул эстутумду үнөмдөөчү структураларды түзүү үчүн каралган төмөнкү деңгээлдеги примитив, мисалы, картага түшүрүү үчүн алсыз сөздүктөр, пакетте камтылбаган нерселер үчүн канонизация сөздүктөр. жалгыз, жана кэштердин ар кандай түрлөрү. Бул колдонуу учурларын колдоо үчүн, бул чыгарылыш да камсыз кылат runtime.AddCleanup и maphash.Салыштыруу.
Жаңы крипто/mlkem пакети
Жаңы пакет крипто/mlkem ML-KEM-768 жана ML-KEM-1024 ишке ашырат.
ML-KEM - бул пост-кванттык ачкыч алмашуу механизми, мурда Kyber деп аталган жана көрсөтүлгөн FIPS 203.
Жаңы пакеттер crypto/hkdf, crypto/pbkdf2 жана crypto/sha3
Жаңы пакет крипто/hkdf HMAC негизиндеги "Чыгаруу жана кеңейтүү" ачкычын чыгаруу функциясын HKDF-де аныкталгандай ишке ашырат. RFC 5869.
Жаңы пакет крипто/pbkdf2 PBKDF2 сырсөзгө негизделген ачкыч чыгаруу функциясын ишке ашырат RFC 8018.
Жаңы пакет крипто/sha3 аныкталгандай SHA-3 хэш функциясын жана SHAKE жана cSHAKE кеңейтилүүчү чыгаруу функцияларын ишке ашырат FIPS 202.
Үч пакет тең болгон golang.org/x/crypto/… пакеттерине негизделген.
FIPS 140-3 ылайыктуу
Бул чыгаруу камтыйт FIPS 140-3 ылайык келүүсүн камсыз кылуу үчүн механизмдердин жаңы топтому.
Go крипто модулу - бул FIPS 140-3 бекитилген алгоритмдерди ишке ашыруу үчүн ачык-айкын колдонулган ички стандарттык китепкана пакеттеринин жыйындысы. Колдонмолор бекитилген алгоритмдер үчүн Go крипто модулун колдонуу үчүн өзгөртүүлөрдү талап кылбайт.
GOFIPS140 жаңы чөйрө өзгөрмөсүн түзүүдө колдонуу үчүн Go крипто модулунун версиясын тандоо үчүн колдонсо болот. Жаңы GODEBUG орнотуу fips140 иштөө учурунда FIPS 140-3 режимин иштетүү үчүн колдонулушу мүмкүн.
Go 1.24 CMVP-аккредитацияланган лабораторияда текшерилип жаткан Go крипто модулу v1.0.0 камтыйт.
Жаңы эксперименталдык пакет тести/синктест
Жаңы эксперименталдык пакет сыноо/синктештирүү Кодду сыноо үчүн колдоо көрсөтөт.
- милдети synctest.run обочолонгон "көбүктүн" ичинде горутиндердин тобун башкарат. Пакет функциясынын көбүгүндө убакыт жалган сааттар менен иштөө.
- милдеттери synctest.күтүү бардык горутиндер учурдагы көбүктүн ичинде бөгөттөлгөнчө күтө туруңуз.
Толук маалыматты пакеттин документтеринен тапса болот.
Синктест пакети эксперименталдык жана GOEXPERIMENT=synctest коюу менен иштетилиши керек. Пакет API келечектеги чыгарылыштарда өзгөрүшү мүмкүн. IN #67434 Көбүрөөк чоо-жайын көрүп, пикир билдире аласыз.
Китепканадагы кичине өзгөрүүлөр
Музыка
Archive/zip жана archive/tar ичиндеги (*Writer.AddFS) ишке ашыруулары эми бош каталог үчүн каталогдун башын жазат.
байт
таңгак байт итераторлор менен иштеген бир нече функцияларды кошот:
- сызыктар Байт кесиминдеги жаңы саптар менен бөлүнгөн саптардын үстүнөн итераторду кайтарат.
- SplitSeq бөлгүч менен бөлүнгөн байт кесиминин бардык бөлүмчөлөрүнүн үстүнөн итераторду кайтарат.
- SplitAfterSeq байт кесиминин ички бөлүктөрүнүн үстүнөн итераторду кайтарат, бөлүүчү ар бир пайда болгондон кийин бөлүнөт.
- FieldsSeq аныкталгандай, боштук символдорунун ырааттуулугунун тегерегиндеги байт кесиминин ички бөлүктөрүнүн үстүнөн итераторду кайтарат unicode.IsSpace
- FieldsFuncSeq предикатты канааттандырган Юникод кодунун чекиттеринин ырааттуулугунун тегерегиндеги байт кесиминин ички тилкелеринин үстүнөн итераторду кайтарат.
крипто/aes
Кайтаруу мааниси NewChipher мындан ары NewCTR, NewGCM, NewCBCEncrypter жана NewCBCDecrypter ыкмаларын ишке ашырбайт. Бул ыкмалар документтештирилбеген жана бардык архитектураларда болгон эмес. Эми мааниси тосуу тиешелүү функцияларга түз өтүшү керек крипто/шифр. Учурда, крипто/шифр дагы эле стандарттык китепкана тарабынан колдоого алынбаса дагы, бул ыкмаларды Блоктун баалуулуктарында текшерет.
крипто/шифр
Жаңы өзгөчөлүк NewGCMWithRandomNonce кайтып келет AEAD, AES-GCMди Seal учурунда кокус нонстанды жаратып, аны шифрленген тексттин алдына коюу менен ишке ашырат.
Реализация агым, кайтты NewCTR менен колдонулганда крипто/aes азыр amd64 жана arm64 боюнча бир нече эсе тезирээк.
NewOFB, NewCFBEncrypter и NewCFBDecrypter азыр эскирген деп жарыяланып жатышат. OFB жана CFB режимдери ырасталбаган, бул көбүнчө активдүү чабуулдарга ачык текстти башкарууга жана калыбына келтирүүгө мүмкүндүк берет. Колдонмолорду колдонуу сунушталат AEAD ордуна. аутентификацияланбаган режим болсо агым зарыл, колдонсо болот NewCTR ордуна.
крипто/ecdsa
PrivateKey.Sign ылайык азыр детерминисттик кол жаратат RFC 6979, кокустук булагы нөл болсо.
крипто/md5
Кайтаруу мааниси md5.new, азыр да интерфейсти ишке ашырат коддоо.binaryappender.
крипто/ранд
милдети окуу азыр эч кандай кемчиликтерге кепилдик берет. Окуу учурунда ката пайда болсо Reader, программа биротоло токтотулат. Демейки Reader ар дайым ийгиликтүү иштөө үчүн документтештирилгендигин эске алыңыз, андыктан бул өзгөртүү Reader өзгөрмөсүн жокко чыгарган программаларга гана таасир этиши керек. Бир өзгөчөлүк 3.17ге чейинки Linux ядролору, мында демейки Reader дагы эле /dev/urandom ачылат жана иштебей калышы мүмкүн.
Linux 6.11 жана андан кийинки версияларында Reader азыр vDSO аркылуу кокустук тутум чалууларын колдонот. Бул, адатта, кичинекей окуулар үчүн бир нече эсе тезирээк.
OpenBSD Readerде азыр arc4random_buf(3) колдонот.
Жаңы өзгөчөлүк текст эми криптографиялык жактан коопсуз кокустук текст саптарын түзө алат.
крипто/rsa
GenerateKey эми 1024 биттен аз ачкыч узундугу суралса, катаны кайтарат. Бардык Кол коюу, Текшерүү, Шифрлөө жана Шифрлөө ыкмалары эми ачкычтын өлчөмү 1024 биттен аз болсо, катаны кайтарат. Мындай ачкычтар кооптуу жана колдонууга болбойт. GODEBUG орнотулууда rsa1024min=0 эски жүрүм-турумду калыбына келтирет, бирок Go иштеп чыгуучулары муну зарыл болгондо гана жана сыноолордо гана жасоону сунушташат, мисалы, //go:debug rsa1024min=0 сызыгын сыноо файлына кошуу менен. Жаңы мисал GenerateKey стандарттык 2024-бит сыноо ачкычын колдонууга жеңил камсыз кылат.
Азыр чалуу коопсуз жана натыйжалуураак PrivateKey.Precompute үчүн PrivateKey.Validate. Алдын ала эсептөө азыр жарым-жартылай толтурулган учурда ылдамыраак PrecomputedValues, мисалы, JSONден ачкыч чыгарып жатканда.
Пакет азыр Validate чакырылбаган учурда дагы жараксыз ачкычтарды четке кагат жана GenerateKey азыр бузулган кокустук булактары үчүн жаңы каталарды кайтара алат. Талаалар Primes и Алдын ала эсептелген структуралар PrivateKey кээ бир баалуулуктар жок болсо да азыр колдонулат жана ырасталат. Төмөндө сүрөттөлгөн RSA ачкычтарын талдоо жана чыгаруу үчүн крипто/x509 үчүн өзгөртүүлөр да бар.
SignPKCS1v15 и VerifyPKCS1v15 азыр SHA-512/224, SHA-512/256 жана SHA-3 колдойт.
GenerateKey азыр жеке көрсөткүчтү түзүү үчүн бир аз башкача ыкманы колдонот (Эйлер функциясынын ордуна Кармайкл функциясы). Негизги сандардан ачкычтарды сырттан калыбына келтирүүчү сейрек колдонмолор башка, бирок бири-бирине шайкеш натыйжаларды бериши мүмкүн.
Ачык жана купуя ачкычтар боюнча операциялар азыр wamда эки эсеге тезирээк.
крипто/ша*
- крипто/sha1: кайтаруу мааниси sha1.New азыр да интерфейсти ишке ашырат коддоо.binaryappender.
- крипто/sha256: баалуулуктар кайтарылды sha256.New и sha256.New224 азыр да интерфейсти ишке ашырат коддоо.binaryappender.
- крипто/sha512: баалуулуктар кайтарылды sha512.New, sha512.New384, sha512.New512_224 и sha512.New512_256, эми интерфейсти да ишке ашырыңыз коддоо.binaryappender.
крипто/тышкы
Жаңы өзгөчөлүк WithDataIndependentTiming колдонуучуга белгилүү бир нускамалардын маалымат маанисинин убактысына карата өзгөртүлбөшүн камсыз кылуучу архитектура-спецификалык өзгөчөлүктөр менен функцияны аткарууга мүмкүндүк берет. Бул туруктуу убакытта иштөө үчүн жазылган код процессор деңгээлиндеги функциялар тарабынан оптималдаштырылган эмес, ошондуктан ал өзгөрүлмө убакытта иштеши үчүн колдонулушу мүмкүн. Учурда WithDataIndependentTiming arm64 боюнча PSTATE.DIT битин колдонот жана башка бардык архитектураларда эч нерсе жасабайт. GODEBUG орнотулууда dataindependenttiming=1 бардык Go программасы үчүн DIT режимин иштетет.
жыйынтыктоо XORBytes киргизүү менен толук же такыр дал келбеши керек. Мурда жүрүм-турум башкача аныкталбаган, ал эми азыр XORBytes дүрбөлөңгө салат.
крипто/тлс
TLS сервери эми Шифрленген Client Hello (ECH) колдойт. Бул функцияны талааны толтуруу менен иштетсе болот. Config.EncryptedClientHelloKeys.
Пост-кванттык ачкыч алмашуунун жаңы механизми X25519MLKEM768 азыр колдоого алынат жана демейки боюнча иштетилгенде Config.CurvePreferences нөл. GODEBUG орнотулууда tlsmlkem=0 демейкиге кайтарат.
Эксперименттик X25519Kyber768Draft00 ачкыч алмашуусун колдоо алынып салынды.
Ачкыч алмашуу тартиби азыр толугу менен крипто/tls пакети тарабынан чечилет. Заказ Config.CurvePreferences азыр этибарга алынбайт жана мазмуну талаа толтурулганда кайсы ачкыч алмашууну киргизүүнү аныктоо үчүн гана колдонулат.
Жаңы талаа ClientHelloInfo.Extensions Client Hello билдирүүсүндө алынган кеңейтүү идентификаторлорунун тизмесин тизмелейт. Бул TLS кардарларынын манжа изин алуу үчүн пайдалуу болушу мүмкүн.
крипто/x509
GODEBUG орнотулууда x509sha1 алынып салынды. Certification.Verify мындан ары SHA-1 негизиндеги кол коюуларды колдобойт.
OID азыр интерфейстерди ишке ашырат коддоо.binaryappender и encoding.TextAppender.
Демейки тастыктама саясатынын талаасы төмөнкүдөн өзгөртүлдү Certificate.PolicyIdentifiers боюнча Certificate.Policies. Сертификаттарды талдоодо эки талаа тең толтурулат, бирок сертификат саясатын түзүүдө алар Certificate.PolicyIdentifiers ордуна Certificate.Policies талаасынан алынат. Бул өзгөртүү артка кайтарылышы мүмкүн. GODEBUG орнотуу x509usepolicies=0.
Certificate түзүү азыр шаблон талаасынан өтүп жатканда RFC 5280 ылайыктуу ыкмасын колдонуп, сериялык номерди жаратат Certificate.SerialNumber нөл, кыйрагандын ордуна.
Certificate.Verify азыр RFC 5280 жана RFC 9618де аныкталгандай саясатты текшерүүнү колдойт. Жаңы талаа VerifyOptions.CertificatePolicies саясаттардын алгылыктуу топтомуна коюлушу мүмкүн OIDs. Жарактуу саясат диаграммалары бар тастыктама чынжырлары гана кайтарылат Certificate.Verify.
MarshalPKCS8PrivateKey азыр жараксыз RSA ачкычын алуу ордуна ката кайтарат. (MarshalPKCS1PrivateKey ката кайтарылышы жок жана жараксыз ачкычтар берилгенде анын жүрүм-туруму аныкталбаган бойдон калат.)
ParsePKCS1PrivateKey и ParsePKCS8PrivateKey азыр коддолгон CRT маанилерин колдонуп, ырастаңыз, андыктан мурда кабыл алынган жараксыз RSA ачкычтарын четке кагыңыз. Колдонуу GODEBUG жөндөөлөрү x509rsacrt=0 CRT маанилерин кайра эсептөөгө кайтарат.
debug/elf
таңгак debug/elf Динамикалык ELF (Аткарылуучу жана Байланышчу Формат) файлдарында символдук версияларды иштетүү үчүн колдоону кошот. Жаңы ыкма File.DynamicVersions ELF файлында аныкталган динамикалык версиялардын тизмесин кайтарат. Жаңы ыкма File.DynamicVersionNeeds Башка ELF объекттеринде аныкталган бул ELF файлы талап кылган динамикалык версиялардын тизмесин кайтарат. Акыр-аягы, жаңы талаалар Symbol.HasVersion и Symbol.VersionIndex символдун версиясын көрсөтүңүз.
коддоо
Эки жаңы интерфейс TextAppender и BinaryAppender байт кесимине объекттин текстин же бинардык көрүнүшүн кошуу үчүн киргизилген. Бул интерфейстер ошол эле функцияны камсыз кылат TextMarshaler и BinaryMarshaler, бирок ар бир жолу жаңы тилке бөлүүнүн ордуна, алар дайындарды түз эле учурдагы кесимге кошот. Бул интерфейстер учурда TextMarshaler жана/же BinaryMarshalerди ишке ашырган стандарттуу китепкана түрлөрү тарабынан ишке ашырылат.
коддоо/json
Куруп жатканда, структура талаасынын тегиндеги жаңы нөл опциясы бар структура талаасы, анын мааниси нөлгө барабар болсо, алынып салынат. Эгерде талаа тибинде IsZero() bool ыкмасы болсо, ал маанинин нөл экенин аныктоо үчүн колдонулат. Болбосо, мааниси нөлгө барабар болот анын түрү үчүн нөл маани. Nol маанилерди өткөрүп жиберүү ниети болгондо, omitzero талаасынын теги тазараак жана катага азыраак жакын болот. Атап айтканда, omitempty айырмаланып, omitzero нөлдөрдү калтырат убакыт.убакыт проблемалардын жалпы булагы болуп саналган баалуулуктар.
Эгерде omiitempty да, нөл да көрсөтүлсө, маани бош же нөл болсо (же экөө тең) талаа алынып салынат.
UnmarshalTypeError.Field азыр деталдуу ката билдирүүлөрүн камсыз кылуу үчүн орнотулган структураларды камтыйт.
барып/түрлөрү
Len() int жана At(int) T сыяктуу жуп методдордун ырааттуулугун көрсөткөн бардык go/types маалымат структураларында эми итераторлорду кайтаруучу ыкмалар бар, бул жөнөкөй кодду колдонууга мүмкүндүк берет:
params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
Бул боюнча:
for param := диапазон fn.Signature().Params().Variables() { use(param)}
Методдор: Interface.EmbeddedTypes Interface.ExplicitMethods Interface. Methods MethodSet.Methods Методдор Scope.Children Структура.Талаалар Tuple.Variables TypeList.Types TypeParamList.TypeParams Union.Terms
хэш/*
- hash/adler32: кайтаруу мааниси жаңы, азыр да интерфейсти ишке ашырат коддоо.binaryappender
- hash/crc32: баалуулуктар кайтарылды жаңы и NewIEEE, эми интерфейсти да ишке ашырыңыз коддоо.binaryappender
- hash/crc64: кайтаруу мааниси жаңы, азыр да интерфейсти ишке ашырат коддоо.binaryappender
- hash/fnv: баалуулуктар кайтарылды New32 New32a New64 New64a New128 и New128a, эми интерфейсти да ишке ашырыңыз коддоо.binaryappender
- hash/maphash: жаңы мүмкүнчүлүктөр Салыштырмалуу и WriteComparable салыштырууга боло турган ар кандай маанинин хэштерин эсептей алат. Бул Go сөздүк ачкычы катары колдонула турган нерселердин бардыгын хэш кылууга мүмкүндүк берет.
журнал/слог
жаңы DiscardHandler эч качан иштетилбеген жана анын жыйынтыгын ар дайым четке кагуучу иштеткич.
деңгээл и LevelVar азыр интерфейсти ишке ашыруу encoding.TextAppender.
математика/*
- математика/чоң: сүзүү, Int и келемиш азыр интерфейсти ишке ашыруу encoding.TextAppender.
- математика/ранд: эскирген жогорку деңгээлдеги функция чалуулары тукум мындан ары эч кандай таасири жок. эски жүрүм-турумун калыбына келтирүү үчүн, сиз колдоно аласыз GODEBUG орнотуу randseednop=0. Көбүрөөк контекстте сунуш 67273.
- math/rand/v2: ЧаЧа8 и КР ТИМи азыр интерфейсти ишке ашыруу коддоо.binaryappender.
тор
ListenCondig азыр ал колдоого алынган системаларда демейки боюнча MPTCP колдонот (учурда бир гана Linux).
IP азыр интерфейсти ишке ашырат encoding.TextAppender.
net/http
Чектөө өзгөрдү ташуу суроо-талапка жооп катары алынган 1xx маалымат жоопторуна. Мурда бул суроону токтотуп, 5тен ашык 1xx жоопту алгандан кийин катаны кайтарып бермек. Бул азыр бардык 1xx жооптордун жалпы өлчөмү конфигурация жөндөөсүнөн ашып кетсе гана катаны кайтарат Transport.MaxResponseHeaderBytes.
Ошондой эле, суроо-талапта көзөмөлдөө илгичи болгондо net/http/httptrace.ClientTrace.Got1xxResponse, азыр жооптордун жалпы санына эч кандай чектөө жок 1xx. Got1xxResponse илгичи суранычты токтотуу үчүн катаны кайтара алат.
ташуу и Server азыр HTTP/2 протоколунун жөндөөлөрүн конфигурациялоого мүмкүндүк берген HTTP2 талаасы бар.
Жаңы талаалар Server.Protocols и Транспорт.Протоколдор сервер же кардар кайсы HTTP протоколдорун конфигурациялоонун жөнөкөй жолун камсыздайт.
Сервер жана кардар шифрленбеген HTTP/2 байланыштарын колдоого конфигурацияланса болот.
качан Server.Protocols UnencrypterHTTP2 камтылган, сервер шифрленбеген порттордогу HTTP/2 туташуусун кабыл алат. Сервер бир портто HTTP/1 жана шифрленбеген HTTP/2 экөөнү тең кабыл ала алат.
качан Транспорт.Протоколдор UnencryptedHTTP2 камтыйт жана HTTP1 камтыбайт, транспорт даректер үчүн шифрленбеген HTTP/2 колдонот http://. Эгер транспорт HTTP/1ди жана шифрленбеген HTTP/2ди колдонууга конфигурацияланса, ал HTTP/1ди колдонот.
Шифрленбеген HTTP/2 үчүн колдоо "Forward-Learning менен HTTP/2" (RFC 9113, 3.3 бөлүмү) колдонот. "Жаңыртуу: h2c" эскирген аталышы колдоого алынбайт.
net/netip
дар, AdrPort и Префикс азыр интерфейстерди ишке ашыруу коддоо.binaryappender и encoding.TextAppender.
net/url
URL азыр да интерфейсти ишке ашырат коддоо.binaryappender.
os/user
Windowsто Учурдагы азыр Windows Nano Server колдонсо болот. Нано серверде жок NetApi32 китепканасынын функцияларын колдонбоо үчүн ишке ашыруу жаңыртылган.
Windowsто Учурдагы, издөө и LookupId азыр төмөнкү камтылган колдонуучу кызмат эсептерин колдойт:
- NT AWTHORITYSYSTEM
- NT БИЙЛИКТИН ЖЕРГИЛИКТҮҮ КЫЗМАТЫ
- NT AWTHORITYNETWORK SERVICE
Windowsто Учурдагы учурдагы колдонуучу жай доменге кошулганда кыйла тездеди, бул көптөгөн корпоративдик колдонуучулар үчүн кеңири таралган учур. Жаңы ишке ашыруунун көрсөткүчү азыр миллисекунд тартибинде, мурунку ишке салыштырганда, бүтүрүү үчүн бир нече секунд, атүгүл мүнөттөр талап кылынышы мүмкүн.
Windowsто Учурдагы азыр учурдагы жип башка колдонуучунун кейпин кийип жатканда процесстин ээси колдонуучуну кайтарат. Буга чейин бул катаны кайтарган.
regexp
Regexp азыр интерфейсти ишке ашырат encoding.TextAdapter.
узактыгы
милдети GOROOT азыр эскирген. Жаңыраак чөйрөлөрдө "go" бинардыкты аныктоо үчүн тутумдук жолду, ал эми GOROOTти аныктоо үчүн go env GOROOTти колдонушуңуз керек.
саптар
таңгак саптар итераторлор менен иштөө үчүн бир нече функцияларды кошот:
- сызыктар Саптагы жаңы саптар менен бөлүнгөн саптардын үстүнөн итераторду кайтарат.
- SplitSeq бөлгүч менен бөлүнгөн саптын бардык ички саптарынын үстүнөн итераторду кайтарат.
- SplitAfterSeq саптын ички саптарынын үстүнөн итераторду кайтарат, бөлүүчү ар бир пайда болгондон кийин бөлүнөт.
- FieldsSeq аныкталгандай, боштук символдорунун ырааттуулугунун айланасындагы саптын ички саптарынын үстүнөн итераторду кайтаратunicode.IsSpace
- FieldsFuncSeq Предикатты канааттандырган Юникод код чекиттеринин ырааттуулугунун тегерегиндеги саптын ички саптарынын үстүнөн итераторду кайтарат.
синхрондоштуруу
Реализация sync.map өзгөчө сөздүк өзгөртүүлөр үчүн, аткарууну жакшыртуу үчүн өзгөртүлгөн. Мисалы, чоң сөздүктөрдө бөлүнүүчү топтомду өзгөртүү талаш-тартыштары азыраак болот жана ал аз талаштуу сөздүк жүктөмүнө жетүү үчүн мындан ары куруу убактысын талап кылбайт.
Эгер кандайдыр бир көйгөйгө туш болсоңуз, эски ишке кайтаруу үчүн куруу учурунда GOEXPERIMENT=nosynchashtriemap коюңуз жана сураныч көйгөй формасын толтуруңуз.
тестирлөө
Жаңы ыкмалар T. Контекст и B. Контекст сыноо аяктагандан кийин жана сыноону тазалоо функциялары аткарылганга чейин жокко чыгарылган контекстти кайтарыңыз.
Жаңы ыкмалар Т.Чдир и Б.Чдир тесттин же эталондун узактыгы үчүн жумушчу каталогду өзгөртүү үчүн колдонулушу мүмкүн.
текст/шаблон
Калыптар эми диапазон-over-func жана диапазон-over-intти колдойт.
убакыт
убакыт азыр интерфейстерди ишке ашырат коддоо.binaryappender и encoding.TextAppender.
Ports
Linux
Болгондой жарыялады Go 1.23 релиз эскертүүлөрүнө ылайык, Go 1.24 Linux ядросунун 3.2 же андан кийинки версиясын талап кылат.
Darwin
Go 1.24 - macOS 11 Big Surда иштей турган акыркы релиз. Go 1.25 үчүн macOS 12 Monterey же андан кийинкиси талап кылынат.
веб ассамблеясы
Go:wasmexport компиляторунун директивасы Go программаларына функцияларды WebAssembly хостуна экспорттоо үчүн кошулду.
WebAssembly System Interface Preview 1де (GOOS=wasip1 GOARCH=wasm), Go 1.24 Go программасын түзүүнү колдойт: реактор/китепкана куруу желегин көрсөтүү менен -buildmode = c-shared.
Азыр go:wasmimport функциялары үчүн аргумент же натыйжа түрлөрү катары көбүрөөк түрлөргө уруксат берилет. Атап айтканда, bool, string, uintptr жана кээ бир түрлөргө көрсөткүчтөр уруксат берилет (деталдарды караңыз документтер), буга чейин уруксат берилген 32-бит жана 64-бит бүтүн жана калкыма чекит түрлөрү жана unsafe.Pointer менен бирге. Бул түрлөргө go:wasmexport функциялары үчүн аргумент же натыйжа түрлөрү катары да уруксат берилет.
WebAssembly үчүн колдоо файлдары misc/wasmдан lib/wasmга жылдырылды.
Баштапкы эс тутумдун изи кыйла азаят, айрыкча кичинекей WebAssembly тиркемелери үчүн.
Windows
32-бит Windows/arm порту (GOOS=windows GOARCH=arm) бузулган деп белгиленди. Толук маалымат #70705
Source: linux.org.ru
