{"id":121950,"date":"2025-02-15T14:22:29","date_gmt":"2025-02-15T12:22:29","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/go-1-24"},"modified":"2025-02-15T14:22:29","modified_gmt":"2025-02-15T12:22:29","slug":"go-1-24","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/news\/go-1-24","title":{"rendered":"Go 1.24","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><a rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/images\/21754\/original.png\" itemprop=\"contentURL\">            <img decoding=\"async\" alt=\"Go 1.24\" src=\"\/wp-content\/uploads\/2025\/02\/6d6299421d83951d055782658814425f.jpg\" style=\"display:block;margin: 0 auto;\" \/>                   <\/a>                       <noindex>      <noindex><\/p>\n<p>A nova vers\u00e3o do Go, 1.24, \u00e9 lan\u00e7ada seis meses ap\u00f3s <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23\">Go 1.23<\/a>. A maioria das mudan\u00e7as est\u00e1 na implementa\u00e7\u00e3o da cadeia de ferramentas, do runtime e das bibliotecas. Como sempre, o lan\u00e7amento garante <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1compat\">a promessa de compatibilidade<\/a> do Go 1. Os desenvolvedores da linguagem esperam que quase todos os programas em Go continuem a compilar e funcionar como antes.<\/p>\n<p><\/noindex><\/noindex>  <\/p>\n<h2>Mudan\u00e7as na linguagem<\/h2>\n<p> <noindex><\/p>\n<p>O Go 1.24 agora suporta completamente <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/46477\">aliases de tipos gen\u00e9ricos<\/a>: o alias de tipo pode ser parametrizado como um tipo declarado. Mais detalhes na <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#Alias_declarations\">especifica\u00e7\u00e3o da linguagem<\/a>. Por enquanto, essa funcionalidade pode ser desativada configurando GOEXPERIMENT=noaliastypeparams; no entanto, a op\u00e7\u00e3o aliastypeparams ser\u00e1 removida no Go 1.25.<\/p>\n<p><\/noindex> <\/p>\n<h2>Ferramentas<\/h2>\n<h3>O comando go<\/h3>\n<p> <noindex><\/p>\n<p>M\u00f3dulos do Go agora podem rastrear depend\u00eancias execut\u00e1veis usando a diretiva tool em go.mod. Isso elimina a necessidade da solu\u00e7\u00e3o anterior de adicionar ferramentas como imports vazios no arquivo, geralmente chamado de \u201ctools.go\u201d. O comando go tool agora pode executar essas ferramentas al\u00e9m das ferramentas fornecidas com o Go. Mais informa\u00e7\u00f5es podem ser vistas em <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/modules\/managing-dependencies#tools\">documenta\u00e7\u00e3o<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>A nova flag -tool para go get leva \u00e0 adi\u00e7\u00e3o da diretiva de ferramenta no m\u00f3dulo atual para os pacotes especificados, al\u00e9m de adicionar diretivas de requisitos.<\/p>\n<p> <noindex><\/p>\n<p>Novo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go#hdr-Package_lists_and_patterns\">meta-padr\u00e3o tool<\/a> se refere a todas as ferramentas no m\u00f3dulo atual. Isso pode ser usado para atualizar todas elas atrav\u00e9s do go get tool ou para instal\u00e1-las no seu diret\u00f3rio GOBIN atrav\u00e9s do go install tool.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Os arquivos execut\u00e1veis criados atrav\u00e9s do go run e o novo comportamento do go tool agora s\u00e3o armazenados em cache no cache de constru\u00e7\u00e3o do Go. Isso torna as execu\u00e7\u00f5es repetidas mais r\u00e1pidas devido ao cache aumentado. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/69290\">#69290<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Os comandos go build e go install agora aceitam a flag -json, que informa a sa\u00edda e os erros da constru\u00e7\u00e3o como uma sa\u00edda estruturada em JSON na sa\u00edda padr\u00e3o. Os detalhes do formato podem ser vistos em go help buildjson.<\/p>\n<p> <noindex><\/p>\n<p>Al\u00e9m disso, go test -json agora reporta a sa\u00edda e os erros da constru\u00e7\u00e3o em JSON, misturados com o JSON do resultado do teste. Eles podem ser diferenciados por novos tipos de A\u00e7\u00e3o, mas se isso causar problemas no sistema de integra\u00e7\u00e3o de testes, pode-se reverter para a sa\u00edda de texto da constru\u00e7\u00e3o atrav\u00e9s da <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configura\u00e7\u00e3o GODEBUG<\/a> gotestjsonbuildtext=1.<\/p>\n<p><\/noindex> <\/p>\n<p>A nova vari\u00e1vel de ambiente GOAUTH fornece uma maneira flex\u00edvel de autenticar pulls privados de m\u00f3dulos. Os detalhes podem ser vistos em go help goauth.<\/p>\n<p> <noindex><\/p>\n<p>O comando go build agora instala <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/debug#BuildInfo.Main\">a vers\u00e3o do m\u00f3dulo principal<\/a> no bin\u00e1rio compilado, com base na tag e\/ou commit do sistema de controle de vers\u00e3o. O sufixo +dirty ser\u00e1 adicionado na presen\u00e7a de altera\u00e7\u00f5es n\u00e3o commitadas. \u00c9 poss\u00edvel usar a flag -buildvcs=false para omitir informa\u00e7\u00f5es de controle de vers\u00e3o do bin\u00e1rio.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Novo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configura\u00e7\u00e3o de GODEBUG<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/toolchain#select\">toolchaintrace=1<\/a> agora pode ser usada para rastrear o processo de sele\u00e7\u00e3o da toolchain na equipe go.<\/p>\n<p><\/noindex> <\/p>\n<h3>Cgo<\/h3>\n<p> <noindex><\/p>\n<p>Cgo suporta novas anota\u00e7\u00f5es para fun\u00e7\u00f5es C para melhorar o desempenho em tempo de execu\u00e7\u00e3o. #cgo noescape cFunctionName informa ao compilador que a mem\u00f3ria passada para a fun\u00e7\u00e3o C cFunctionName n\u00e3o escapa. #cgo nocallback cFunctionName informa ao compilador que a fun\u00e7\u00e3o C cFunctionName n\u00e3o chama nenhuma fun\u00e7\u00e3o Go. Mais informa\u00e7\u00f5es podem ser vistas na <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/cgo#hdr-Optimizing_calls_of_C_code\">documenta\u00e7\u00e3o do cgo<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Cgo atualmente se recusa a compilar chamadas para fun\u00e7\u00f5es C que possuem declara\u00e7\u00f5es incompat\u00edveis. Por exemplo, se f for declarado tanto como void f(int) quanto como void f(double), cgo gerar\u00e1 um erro em vez de possivelmente gerar uma sequ\u00eancia de chamadas incorreta f(0). O novo neste lan\u00e7amento \u00e9 uma detec\u00e7\u00e3o aprimorada dessa condi\u00e7\u00e3o de erro quando declara\u00e7\u00f5es incompat\u00edveis aparecem em arquivos diferentes. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67699\">#67699<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Objdump<\/h3>\n<p>A ferramenta objdump agora suporta desassemblagem em LoongArch de 64 bits (GOARCH=loong64), RISC-V (GOARCH=riscv64) e S390X (GOARCH=s390x).<\/p>\n<h3>Vet<\/h3>\n<p>Um novo analisador de testes informa erros comuns em declara\u00e7\u00f5es de testes, fuzzers, benchmarks e exemplos em pacotes de teste, como nomes malformados, assinaturas incorretas ou exemplos que documentam identificadores inexistentes. Alguns desses erros podem levar \u00e0 falha dos testes.<\/p>\n<p> <noindex><\/p>\n<p>O analisador printf existente agora relata diagn\u00f3sticos para chamadas da forma fmt.Printf(s), onde s \u00e9 uma string de formato n\u00e3o constante, sem outros argumentos. Essas chamadas quase sempre s\u00e3o um erro, pois o valor de s pode conter o s\u00edmbolo %; em vez disso, use fmt.Print. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/60529\">60529<\/a>. Essa verifica\u00e7\u00e3o tende a fazer descobertas em c\u00f3digo existente, e, portanto, \u00e9 aplicada apenas quando a vers\u00e3o da linguagem (conforme especificado pela diretiva go no arquivo go.mod ou nos coment\u00e1rios `\/\/go:build`) \u00e9 pelo menos Go 1.24, para evitar que ocorram falhas de integra\u00e7\u00e3o cont\u00ednua ao atualizar para a toolchain Go 1.24.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>O analisador buildtag existente agora reporta diagn\u00f3sticos quando h\u00e1 uma restri\u00e7\u00e3o de vers\u00e3o de build incorreta. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/go#hdr-Build_constraints\">vers\u00e3o superior da build<\/a> Go na diretiva \/\/go:build. Por exemplo, \/\/go:build go1.23.1 refere-se a uma vers\u00e3o pontual; em vez disso, use \/\/go:build go1.23. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/64127\">#64127<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>O analisador copylock existente agora reporta diagn\u00f3sticos quando uma vari\u00e1vel declarada em um loop 'for' triplo, como for i := iter(); done(i); i = next(i) { \u2026 }, cont\u00e9m sync.Locker, como sync.Mutex. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#language\">Go 1.22<\/a> mudou o comportamento desses loops para criar uma nova vari\u00e1vel em cada itera\u00e7\u00e3o, copiando os valores da itera\u00e7\u00e3o anterior; essa c\u00f3pia n\u00e3o \u00e9 segura para locks. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/66387\">#66387<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>GOCACHEPROG<\/h3>\n<p> <noindex><\/p>\n<p>O bin\u00e1rio interno cmd\/go e o mecanismo de cache de testes agora podem ser implementados por processos filhos que implementam o protocolo JSON entre a ferramenta cmd\/go e o processo filho, nomeado pela vari\u00e1vel de ambiente GOCACHEPROG. Antes, isso estava sob GOEXPERIMENT. Os detalhes do protocolo podem ser vistos em <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go\/internal\/cacheprog\">documenta\u00e7\u00e3o<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Tempo de Execu\u00e7\u00e3o<\/h2>\n<p> <noindex><\/p>\n<p>V\u00e1rias melhorias de desempenho no runtime reduziram a sobrecarga da CPU em m\u00e9dia de 2 a 3% entre um conjunto representativo de benchmarks. Os resultados podem variar de acordo com o aplicativo. Essas melhorias incluem uma nova implementa\u00e7\u00e3o interna de mapa baseada em <a rel=\"nofollow\" href=\"https:\/\/abseil.io\/about\/design\/swisstables\">Tabelas Suecas<\/a>, aloca\u00e7\u00e3o de mem\u00f3ria mais eficiente para pequenos objetos e uma nova implementa\u00e7\u00e3o interna de mutex no runtime.<\/p>\n<p><\/noindex> <\/p>\n<p>A nova implementa\u00e7\u00e3o interna de mapa e o novo mutex do runtime podem ser desativados com as configura\u00e7\u00f5es GOEXPERIMENT=noswissmap e GOEXPERIMENT=nospinbitmutex durante a build, respectivamente.<\/p>\n<h2>Compilador<\/h2>\n<p>O compilador j\u00e1 proibia a defini\u00e7\u00e3o de novos m\u00e9todos com tipos de receptor gerados pelo cgo, mas era poss\u00edvel contornar essa restri\u00e7\u00e3o por meio de alias de tipo. O Go 1.24 agora sempre reporta um erro se o receptor designa um tipo gerado pelo cgo, direta ou indiretamente (atrav\u00e9s de um tipo alias).<\/p>\n<h2>Linker<\/h2>\n<p>O linker agora gera um identificador de build GNU (registro ELF NT_GNU_BUILD_ID) em plataformas ELF e UUID (comando de carregamento Mach-O LC_UUID) no macOS por padr\u00e3o. O identificador de build ou UUID \u00e9 derivado do identificador de build do Go. Isso pode ser desativado com a flag do linker -B none, ou redefinido com a flag do linker -B 0xNNNN com um valor hexadecimal especificado pelo usu\u00e1rio.<\/p>\n<h2>Promo\u00e7\u00e3o<\/h2>\n<p> <noindex><\/p>\n<p>Como indicado em <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#bootstrap\">notas da vers\u00e3o do Go 1.22<\/a>, Go 1.24 agora requer Go 1.22.6 ou posterior para ser executado. Os desenvolvedores esperam que Go 1.26 exija um ponto de lan\u00e7amento Go 1.24 ou posterior para sua execu\u00e7\u00e3o.<\/p>\n<p><\/noindex> <\/p>\n<h2>Biblioteca padr\u00e3o<\/h2>\n<h3>Acesso limitado ao sistema de arquivos por diret\u00f3rio<\/h3>\n<p> <noindex><\/p>\n<p>Novo tipo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> oferece a capacidade de realizar opera\u00e7\u00f5es de sistema de arquivos dentro de um diret\u00f3rio espec\u00edfico.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Fun\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#OpenRoot\">os.OpenRoot<\/a> abre um diret\u00f3rio e retorna <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a>. Os m\u00e9todos em <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> operam dentro deste diret\u00f3rio e n\u00e3o permitem que os caminhos fa\u00e7am refer\u00eancia a locais fora do diret\u00f3rio, incluindo aqueles que seguem links simb\u00f3licos para fora do diret\u00f3rio. Os m\u00e9todos em os.Root refletem a maioria das opera\u00e7\u00f5es de sistema de arquivos dispon\u00edveis no pacote os, incluindo, por exemplo, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Open\">os.Root.Open<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Create\">os.Root.Create<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Mkdir\">os.Root.Mkdir<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Stat\">os.Root.Stat<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nova fun\u00e7\u00e3o de benchmark<\/h3>\n<p> <noindex><\/p>\n<p>Os benchmarks agora podem usar um m\u00e9todo mais r\u00e1pido e menos propenso a erros <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Loop\">testing.B.Loop<\/a> para realizar itera\u00e7\u00f5es de benchmark como for b.Loop() { \u2026 } em vez de estruturas de loop t\u00edpicas envolvendo b.N como for range b.N. Isso oferece duas vantagens significativas:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>A fun\u00e7\u00e3o de benchmark \u00e9 executada exatamente uma vez para cada -count, assim, etapas de configura\u00e7\u00e3o e limpeza dispendiosas s\u00e3o executadas apenas uma vez.<\/li>\n<li>Os par\u00e2metros da fun\u00e7\u00e3o e os resultados continuam a existir, impedindo que o compilador otimize completamente o corpo do loop.<\/li>\n<\/ul>\n<h3>Finalizadores aprimorados<\/h3>\n<p> <noindex><\/p>\n<p>Nova fun\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#AddCleanup\">runtime.AddCleanup<\/a> \u00e9 um mecanismo de finaliza\u00e7\u00e3o que \u00e9 mais flex\u00edvel, mais eficiente e menos propenso a erros do que <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#SetFinalizer\">runtime.SetFinalizer<\/a>. AddCleanup anexa uma fun\u00e7\u00e3o de limpeza a um objeto, que ser\u00e1 chamada assim que o objeto se tornar inacess\u00edvel. No entanto, ao contr\u00e1rio do SetFinalizer, v\u00e1rias limpezas podem ser anexadas a um \u00fanico objeto, limpezas podem ser anexadas a ponteiros internos, limpezas geralmente n\u00e3o causam vazamentos quando os objetos formam ciclos, e limpezas n\u00e3o atrasam a libera\u00e7\u00e3o do objeto ou objetos que ele aponta. O novo c\u00f3digo deve preferir AddCleanup em vez de SetFinalizer.<\/p>\n<p><\/noindex> <\/p>\n<h3>Novo pacote weak<\/h3>\n<p> <noindex><\/p>\n<p>Novo pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/weak\/\">weak<\/a> fornece ponteiros fracos.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Ponteiros fracos s\u00e3o um primitivo de baixo n\u00edvel, fornecido para criar estruturas que utilizam mem\u00f3ria de forma eficiente, como dicion\u00e1rios fracos para mapeamento de valores, dicion\u00e1rios de canoniza\u00e7\u00e3o para qualquer coisa que n\u00e3o seja coberta pelo pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unique\/\">unique<\/a>, e diferentes tipos de caches. Para suportar esses casos de uso, este lan\u00e7amento tamb\u00e9m fornece <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/#AddCleanup\">runtime.AddCleanup<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/maphash\/#Comparable\">maphash.Compar\u00e1vel<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Novo pacote crypto\/mlkem<\/h3>\n<p> <noindex><\/p>\n<p>Novo pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/mlkem\/\">crypto\/mlkem<\/a> implementa ML-KEM-768 e ML-KEM-1024.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>ML-KEM \u00e9 um mecanismo de troca de chaves p\u00f3s-qu\u00e2ntico, anteriormente conhecido como Kyber e especificado em <a rel=\"nofollow\" href=\"https:\/\/doi.org\/10.6028\/NIST.FIPS.203\">FIPS 203<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Novos pacotes crypto\/hkdf, crypto\/pbkdf2 e crypto\/sha3<\/h3>\n<p> <noindex><\/p>\n<p>Novo pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/hkdf\/\">crypto\/hkdf<\/a> implementa a fun\u00e7\u00e3o de sa\u00edda de chave baseada em HMAC \u201cExtract-and-Expand\u201d HKDF, conforme definido em <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5869.html\">RFC 5869<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Novo pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/pbkdf2\/\">crypto\/pbkdf2<\/a> implementa a fun\u00e7\u00e3o de sa\u00edda de chave baseada em senha PBKDF2, conforme definido em <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8018.html\">RFC 8018<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Novo pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha3\/\">crypto\/sha3<\/a> implementa a fun\u00e7\u00e3o hash SHA-3 e as fun\u00e7\u00f5es SHAKE e cSHAKE de sa\u00edda extens\u00edvel, conforme definido em <a rel=\"nofollow\" href=\"http:\/\/doi.org\/10.6028\/NIST.FIPS.202\">FIPS 202<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Todos os tr\u00eas pacotes s\u00e3o baseados em pacotes existentes previamente em golang.org\/x\/crypto\/\u2026<\/p>\n<h3>Conformidade FIPS 140-3<\/h3>\n<p> <noindex><\/p>\n<p>Este lan\u00e7amento inclui <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/security\/fips140\">um novo conjunto de mecanismos para garantir a conformidade FIPS 140-3<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>O m\u00f3dulo criptogr\u00e1fico Go \u00e9 um conjunto de pacotes internos da biblioteca padr\u00e3o que s\u00e3o usados de forma transparente para implementar algoritmos aprovados pela FIPS 140-3. Os aplicativos n\u00e3o requerem mudan\u00e7as para usar o m\u00f3dulo criptogr\u00e1fico Go para algoritmos aprovados.<\/p>\n<p> <noindex><\/p>\n<p>A nova vari\u00e1vel de ambiente GOFIPS140 pode ser usada para selecionar a vers\u00e3o do m\u00f3dulo criptogr\u00e1fico Go a ser usada na constru\u00e7\u00e3o. O novo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configura\u00e7\u00e3o de GODEBUG<\/a> fips140 pode ser usado para ativar o modo FIPS 140-3 durante a execu\u00e7\u00e3o.<\/p>\n<p><\/noindex> <\/p>\n<p>Go 1.24 inclui a vers\u00e3o v1.0.0 do m\u00f3dulo criptogr\u00e1fico Go, que atualmente est\u00e1 sendo testada com um laborat\u00f3rio credenciado pelo CMVP.<\/p>\n<h3>Novo pacote experimental testing\/synctest<\/h3>\n<p> <noindex><\/p>\n<p>Novo pacote experimental <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/\">testing\/synctest<\/a> fornece suporte para testar c\u00f3digo concorrente.<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>Fun\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/#Run\">synctest.Run<\/a> executa um grupo de goroutines em um \u2018bolha\u2019 isolada. Na bolha, as fun\u00e7\u00f5es do pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\">time<\/a> operam em rel\u00f3gios fict\u00edcios.<\/li>\n<li>Fun\u00e7\u00f5es <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest#Wait\">synctest.Wait<\/a> aguardam at\u00e9 que todas as goroutines estejam bloqueadas na bolha atual.<\/li>\n<\/ul>\n<p>Detalhes podem ser vistos na documenta\u00e7\u00e3o do pacote.<\/p>\n<p> <noindex><\/p>\n<p>O pacote synctest \u00e9 experimental e deve ser ativado definindo GOEXPERIMENT=synctest. A API do pacote pode mudar em lan\u00e7amentos futuros. Em <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67434\">#67434<\/a> pode-se ver mais detalhes e fornecer feedback.<\/p>\n<p><\/noindex> <\/p>\n<h3>Mudan\u00e7as menores na biblioteca<\/h3>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/archive\/\">archive<\/a><\/h4>\n<p>As implementa\u00e7\u00f5es (*Writer.AddFS) em archive\/zip e archive\/tar agora escrevem o cabe\u00e7alho do diret\u00f3rio para diret\u00f3rios vazios.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\/\">bytes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\">bytes<\/a> adiciona v\u00e1rias fun\u00e7\u00f5es que trabalham com iteradores:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#Lines\">Lines<\/a> retorna um iterador sobre linhas separadas por nova linha em uma fatia de bytes.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitSeq\">SplitSeq<\/a> retorna um iterador sobre todos os subslices de uma fatia de bytes, separada pelo delimitador.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitAfterSeq\">SplitAfterSeq<\/a> retorna um iterador sobre subslices de uma fatia de bytes, separada ap\u00f3s cada ocorr\u00eancia do delimitador.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsSeq\">FieldsSeq<\/a> retorna um iterador sobre subslices de uma fatia de bytes ao redor de sequ\u00eancias de caracteres de espa\u00e7o, conforme definido por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unicode#IsSpace\">unicode.IsSpace<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsFuncSeq\">FieldsFuncSeq<\/a> retorna um iterador sobre subslices de uma fatia de bytes ao redor de sequ\u00eancias de pontos de c\u00f3digo Unicode que satisfazem o predicado.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>O valor retornado <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes#NewCipher\">NewChipher<\/a> n\u00e3o implementa mais os m\u00e9todos NewCTR, NewGCM, NewCBCEncrypter e NewCBCDecrypter. Esses m\u00e9todos foram n\u00e3o documentados e n\u00e3o estavam dispon\u00edveis em todas as arquiteturas. Agora o valor <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Block\">Block<\/a> deve ser passado diretamente para as fun\u00e7\u00f5es correspondentes <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a>. At\u00e9 o momento, crypto\/cipher ainda verifica esses m\u00e9todos em valores Block, mesmo que n\u00e3o sejam mais suportados pela biblioteca padr\u00e3o.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nova fun\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewGCMWithRandomNonce\">NewGCMWithRandomNonce<\/a> fundos! E ainda recebe elogios de 75-90% dos participantes, embora o desenvolvimento do projeto claramente tenha desacelerado. O mais surpreendente \u00e9 que todos foram <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a>, que implementa AES-GCM, gerando um n\u00famero \u00fanico aleat\u00f3rio durante a opera\u00e7\u00e3o Seal e adicionando-o ao in\u00edcio do texto cifrado.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Implementa\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a>, retornada <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> quando usada com <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a> agora \u00e9 v\u00e1rias vezes mais r\u00e1pida em amd64 e arm64.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewOFB\">NewOFB<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBEncrypter\">NewCFBEncrypter<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBDecrypter\">NewCFBDecrypter<\/a> agora est\u00e3o marcados como obsoletos. Os modos OFB e CFB n\u00e3o s\u00e3o autenticados, o que geralmente permite ataques ativos para manipular e recuperar texto claro. Recomenda-se que as aplica\u00e7\u00f5es usem <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a> em vez disso. Se o modo n\u00e3o autenticado <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a> for necess\u00e1rio, pode-se usar <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> em vez disso.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa\/\">crypto\/ecdsa<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa#PrivateKey.Sign\">PrivateKey.Sign<\/a> agora cria uma assinatura determin\u00edstica de acordo com <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6979.html\">RFC 6979<\/a>, se a fonte de aleatoriedade for nil.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/md5\/\">crypto\/md5<\/a><\/h4>\n<p> <noindex><\/p>\n<p>O valor retornado <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/md5#New\">md5.New<\/a>, agora tamb\u00e9m implementa a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand\/\">crypto\/rand<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Fun\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Read\">Read<\/a> agora garante a aus\u00eancia de falhas. Se Read encontrar um erro durante a leitura <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Reader\">Reader<\/a>, o programa terminar\u00e1 de forma irrevers\u00edvel. Observe que o Reader padr\u00e3o est\u00e1 documentado para sempre funcionar com sucesso, portanto, essa mudan\u00e7a deve afetar apenas aqueles programas que substituem a vari\u00e1vel Reader. Uma exce\u00e7\u00e3o s\u00e3o os n\u00facleos do Linux anteriores \u00e0 vers\u00e3o 3.17, onde o Reader padr\u00e3o ainda abre \/dev\/urandom e pode falhar.<\/p>\n<p><\/noindex> <\/p>\n<p>No Linux 6.11 e vers\u00f5es posteriores, o Reader agora utiliza a chamada de sistema getrandom atrav\u00e9s do vDSO. Isso \u00e9 v\u00e1rias vezes mais r\u00e1pido, geralmente para leituras pequenas.<\/p>\n<p>No OpenBSD, o Reader agora utiliza arc4random_buf(3).<\/p>\n<p> <noindex><\/p>\n<p>Nova fun\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Text\">Texto<\/a> agora pode gerar cadeias de texto aleat\u00f3rias criptograficamente seguras.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa\/\">crypto\/rsa<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> agora retorna um erro se uma chave com menos de 1024 bits for solicitada. Todos os m\u00e9todos Sign, Verify, Encrypt e Decrypt agora retornam um erro se usados com uma chave de tamanho inferior a 1024 bits. Essas chaves n\u00e3o s\u00e3o seguras e n\u00e3o devem ser utilizadas. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configura\u00e7\u00e3o GODEBUG<\/a> rsa1024min=0 restaura o comportamento anterior, mas os desenvolvedores do Go recomendam fazer isso apenas quando necess\u00e1rio e somente em testes, por exemplo, adicionando a linha \/\/go:debug rsa1024min=0 no arquivo de teste. O novo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#example-GenerateKey-TestKey\">exemplo<\/a> GenerateKey fornece uma chave de teste padr\u00e3o de 2024 bits f\u00e1cil de utilizar.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Agora \u00e9 seguro e mais eficiente chamar <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precompute\">PrivateKey.Precompute<\/a> at\u00e9 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Validate\">PrivateKey.Validate<\/a>. Precompute agora \u00e9 mais r\u00e1pido na presen\u00e7a de valores parcialmente preenchidos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrecomputedValues\">PrecomputedValues<\/a>, por exemplo, ao extrair a chave de um JSON.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>O pacote agora rejeita mais chaves inv\u00e1lidas, mesmo quando Validate n\u00e3o \u00e9 chamado, e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> agora pode retornar novos erros para fontes de aleatoriedade quebradas. Os campos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Primes\">Primes<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precomputed\">Precomputed<\/a> da estrutura <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey\">PrivateKey<\/a> agora s\u00e3o utilizados e validados mesmo quando alguns valores est\u00e3o ausentes. Tamb\u00e9m foram feitas altera\u00e7\u00f5es no crypto\/x509 para a an\u00e1lise e extra\u00e7\u00e3o de chaves RSA, descritas abaixo.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#SignPKCS1v15\">SignPKCS1v15<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#VerifyPKCS1v15\">VerifyPKCS1v15<\/a> agora suportam SHA-512\/224, SHA-512\/256 e SHA-3.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> agora utiliza um m\u00e9todo ligeiramente diferente para gerar o expoente privado (fun\u00e7\u00e3o de Carmichael em vez da fun\u00e7\u00e3o de Euler). Aplica\u00e7\u00f5es raras que recriam chaves somente a partir de n\u00fameros primos podem criar resultados diferentes, mas compat\u00edveis.<\/p>\n<p><\/noindex> <\/p>\n<p>Opera\u00e7\u00f5es com chaves p\u00fablicas e privadas agora s\u00e3o at\u00e9 duas vezes mais r\u00e1pidas no wasm.<\/p>\n<h3>crypto\/sha*<\/h3>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha1\/\">crypto\/sha1<\/a>: o valor retornado por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha1#New\">sha1.New<\/a> agora tamb\u00e9m implementa a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha256\/\">crypto\/sha256<\/a>: os valores retornados por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New\">sha256.New<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New224\">sha256.New224<\/a> agora tamb\u00e9m implementam a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha512\/\">crypto\/sha512<\/a>: os valores retornados por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New\">sha512.New<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New384\">sha512.New384<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_224\">sha512.New512_224<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_256\">sha512.New512_256<\/a>, agora tamb\u00e9m implementam a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle\/\">crypto\/subtle<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nova fun\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#WithDataIndependentTiming\">WithDataIndependentTiming<\/a> permite ao usu\u00e1rio executar fun\u00e7\u00f5es com caracter\u00edsticas espec\u00edficas da arquitetura, que garantem a invari\u00e2ncia de certas instru\u00e7\u00f5es em rela\u00e7\u00e3o ao tempo de valor dos dados. Isso pode ser usado para garantir que o c\u00f3digo, projetado para operar em tempo constante, n\u00e3o foi otimizado por fun\u00e7\u00f5es de n\u00edvel de processador de forma que opere em tempo vari\u00e1vel. Atualmente, o WithDataIndependentTiming utiliza o bit PSTATE.DIT no arm64 e n\u00e3o faz nada em todas as outras arquiteturas. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configura\u00e7\u00e3o GODEBUG<\/a> dataindependenttiming=1 ativa o modo DIT para todo o programa Go.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Sa\u00edda <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#XORBytes\">XORBytes<\/a> deve se sobrepor completamente ou n\u00e3o com a entrada. O comportamento anterior era indefinido em caso contr\u00e1rio, enquanto agora o XORBytes ir\u00e1 panicar.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls\/\">crypto\/tls<\/a><\/h4>\n<p> <noindex><\/p>\n<p>O servidor TLS agora suporta Encrypted Client Hello (ECH). Esta funcionalidade pode ser ativada preenchendo o campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.EncryptedClientHelloKeys\">Config.EncryptedClientHelloKeys<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Um novo mecanismo de troca de chave p\u00f3s-qu\u00e2ntico <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#X25519MLKEM768\">X25519MLKEM768<\/a> agora \u00e9 suportado e ativado por padr\u00e3o quando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> \u00e9 nil. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configura\u00e7\u00e3o GODEBUG<\/a> tlsmlkem=0 retorna o padr\u00e3o.<\/p>\n<p><\/noindex> <\/p>\n<p>O suporte \u00e0 troca de chave experimental X25519Kyber768Draft00 foi removido.<\/p>\n<p> <noindex><\/p>\n<p>A ordem de troca de chave agora \u00e9 totalmente processada pelo pacote crypto\/tls. A ordem <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> agora \u00e9 ignorada, e o conte\u00fado \u00e9 usado apenas para determinar quais trocas de chave incluir quando o campo \u00e9 preenchido.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Novo campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#ClientHelloInfo.Extensions\">ClientHelloInfo.Extensions<\/a> enumera a lista de identificadores de extens\u00f5es recebidos na mensagem Client Hello. Isso pode ser \u00fatil para fingerprinting de clientes TLS.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509\/\">crypto\/x509<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Configura\u00e7\u00e3o GODEBUG<\/a> x509sha1 foi removido. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certficicate.Verify<\/a> n\u00e3o suporta mais assinaturas baseadas em SHA-1.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OID<\/a> agora implementa as interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>O campo padr\u00e3o de pol\u00edticas de certificado foi alterado de <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.PolicyIdentifiers\">Certificate.PolicyIdentifiers<\/a> para <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Policies\">Certificate.Policies<\/a>. Quando analisando certificados, ambos os campos ser\u00e3o preenchidos, mas ao criar pol\u00edticas de certificados, os valores ser\u00e3o extra\u00eddos do campo Certificate.Policies em vez de Certificate.PolicyIdentifiers. Essa mudan\u00e7a pode ser revertida <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">com a configura\u00e7\u00e3o GODEBUG<\/a> x509usepolicies=0.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#CreateCertificate\">CreateCertificate<\/a> agora ir\u00e1 gerar um n\u00famero de s\u00e9rie utilizando um m\u00e9todo compat\u00edvel com a RFC 5280 ao passar o modelo pelo campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.SerialNumber\">Certificate.SerialNumber<\/a> nil, em vez de falhar.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a> agora suporta valida\u00e7\u00e3o de pol\u00edticas, conforme definido na RFC 5280 e RFC 9618. O novo campo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#VerifyOptions.CertificatePolicies\">VerifyOptions.CertificatePolicies<\/a> pode ser definido em um conjunto aceit\u00e1vel de pol\u00edticas <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OIDs<\/a>. Somente cadeias de certificados com gr\u00e1ficos de pol\u00edticas v\u00e1lidos ser\u00e3o retornadas de <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS8PrivateKey\">MarshalPKCS8PrivateKey<\/a> agora retorna um erro em vez de extrair uma chave RSA inv\u00e1lida. (<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS1PrivateKey\">MarshalPKCS1PrivateKey<\/a> n\u00e3o possui retorno de erro e seu comportamento com chaves incorretas fornecidas continua indefinido.)<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS1PrivateKey\">ParsePKCS1PrivateKey<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS8PrivateKey\">ParsePKCS8PrivateKey<\/a> agora utilizam e validam os valores codificados CRT, portanto podem rejeitar chaves RSA inv\u00e1lidas que anteriormente eram aceitas. O uso de <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configura\u00e7\u00e3o GODEBUG<\/a> x509rsacrt=0 reverte para o rec\u00e1lculo dos valores CRT.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\/\">debug\/elf<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\">debug\/elf<\/a> adiciona suporte para processamento de vers\u00f5es de s\u00edmbolos em arquivos ELF (Executable and Linkable Format). O novo m\u00e9todo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersions\">File.DynamicVersions<\/a> retorna uma lista de vers\u00f5es din\u00e2micas definidas no arquivo ELF. O novo m\u00e9todo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersionNeeds\">File.DynamicVersionNeeds<\/a> retorna uma lista de vers\u00f5es din\u00e2micas exigidas por este arquivo ELF, que est\u00e3o definidas em outros objetos ELF. Finalmente, novos campos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.HasVersion<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.VersionIndex<\/a> indicam a vers\u00e3o do s\u00edmbolo.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/\">encoding<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Dois novos interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">TextAppender<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">BinaryAppender<\/a> foram introduzidos para adicionar a representa\u00e7\u00e3o textual ou bin\u00e1ria de um objeto a um slice de bytes. Essas interfaces oferecem a mesma funcionalidade que <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextMarshaler\">TextMarshaler<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryMarshaler\">BinaryMarshaler<\/a>, mas em vez de alocar um novo slice a cada vez, elas adicionam dados diretamente ao slice existente. Essas interfaces agora s\u00e3o implementadas pelos tipos da biblioteca padr\u00e3o que j\u00e1 implementam TextMarshaler e\/ou BinaryMarshaler.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json\/\">encoding\/json<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Ao serializar, um campo de estrutura com a nova op\u00e7\u00e3o omitzero no marcador de campo ser\u00e1 omitido se seu valor for zero. Se o tipo do campo tiver um m\u00e9todo IsZero() bool, ele ser\u00e1 usado para determinar se o valor \u00e9 zero. Caso contr\u00e1rio, o valor ser\u00e1 zero se for <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#The_zero_value\">um valor nulo para seu tipo<\/a>. O marcador de campo omitzero \u00e9 mais limpo e menos suscet\u00edvel a erros do que omitempty, quando a inten\u00e7\u00e3o \u00e9 omitir valores nulos. Em particular, ao contr\u00e1rio de omitempty, omitzero omite valores nulos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">time.Time<\/a> , o que \u00e9 uma origem comum de problemas.<\/p>\n<p><\/noindex> <\/p>\n<p>Se ambos omitempty e omitzero forem especificados, o campo ser\u00e1 omitido se o valor estiver vazio ou nulo (ou ambos ao mesmo tempo).<\/p>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json#UnmarshalTypeError.Field\">UnmarshalTypeError.Field<\/a> agora inclui estruturas embutidas para fornecer mensagens de erro mais detalhadas.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types\/\">go\/types<\/a><\/h4>\n<p>Todas as estruturas de dados go\/types que revelam sequ\u00eancias de pares de m\u00e9todos, como Len() int e At(int) T, agora tamb\u00e9m possuem m\u00e9todos que retornam iteradores, permitindo simplificar o c\u00f3digo como este:<\/p>\n<p> params := fn.Type.(*types.Signature).Params() for i := 0; i &lt; params.Len(); i++ {   use(params.At(i)) }   <\/p>\n<p>Para este:<\/p>\n<p> for param := range fn.Signature().Params().Variables() {   use(param) }   <noindex><\/p>\n<p>M\u00e9todos: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.EmbeddedTypes\">Interface.EmbeddedTypes<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.ExplicitMethods\">Interface.ExplicitMethods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.Methods\">Interface.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#MethodSet.Methods\">MethodSet.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Named.Methods\">Named.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Scope.Children\">Scope.Children<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Struct.Fields\">Struct.Fields<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Tuple.Variables\">Tuple.Variables<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#TypeList.Types\">TypeList.Types<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#TypeParamList.TypeParams\">TypeParamList.TypeParams<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Union.Terms\">Union.Terms<\/a><\/p>\n<p><\/noindex> <\/p>\n<h4>hash\/*<\/h4>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32\/\">hash\/adler32<\/a>: o valor retornado por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32#New\">Novo<\/a>, agora tamb\u00e9m implementa a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32\/\">hash\/crc32<\/a>: os valores retornados por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#New\">Novo<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#NewIEEE\">NewIEEE<\/a>, agora tamb\u00e9m implementam a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64\/\">hash\/crc64<\/a>: o valor retornado por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64#New\">Novo<\/a>, agora tamb\u00e9m implementa a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv\/\">hash\/fnv<\/a>: os valores retornados por <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New32\">New32<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New32a\">New32a<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New64\">New64<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New64a\">New64a<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128\">New128<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128a\">New128a<\/a>, agora tamb\u00e9m implementam a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash\/\">hash\/maphash<\/a>: novas fun\u00e7\u00f5es <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#Comparable\">Compar\u00e1vel<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#WriteComparable\">WriteComparable<\/a> podem calcular hash de qualquer valor que possa ser comparado. Isso permite hashear qualquer coisa que possa ser usada como chave para um dicion\u00e1rio Go.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog\/\">log\/slog<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Novo <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#DiscardHandler\">DiscardHandler<\/a> \u00e9 um manipulador que nunca \u00e9 ativado e sempre descarta sua sa\u00edda.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#Level\">N\u00edvel<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#LevelVar\">LevelVar<\/a> agora implementam a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4>math\/*<\/h4>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big\/\">math\/big<\/a>: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Float\">Float<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Int\">Int<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Rat\">Rat<\/a> agora implementam a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/\">math\/rand<\/a>: chamadas de fun\u00e7\u00e3o de alto n\u00edvel obsoletas <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand#Seed\">Seed<\/a> n\u00e3o t\u00eam mais efeito. Para restaurar o comportamento anterior, voc\u00ea pode usar <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">configura\u00e7\u00e3o GODEBUG<\/a> randseednop=0. Mais contexto em <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67273\">a proposta 67273<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2\/\">math\/rand\/v2<\/a>: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#ChaCha8\">ChaCha8<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#PCG\">PCG<\/a> agora implementam a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/\">net<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#ListenConfig\">ListenCondig<\/a> agora usa MPTCP por padr\u00e3o em sistemas que o suportam (por enquanto, apenas Linux).<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#IP\">IP<\/a> agora implementa a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/\">net\/http<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Mudou a restri\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> nas respostas informativas recebidas 1xx em resposta a um pedido. Antes, isso interrompia o pedido e retornava um erro ap\u00f3s receber mais de 5 respostas 1xx. Agora, isso retorna um erro apenas se o tamanho total de todas as respostas 1xx exceder a configura\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.MaxResponseHeaderBytes\">Transport.MaxResponseHeaderBytes<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Al\u00e9m disso, quando um pedido possui um hook para rastreamento <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/httptrace#ClientTrace.Got1xxResponse\">net\/http\/httptrace.ClientTrace.Got1xxResponse<\/a>, agora n\u00e3o h\u00e1 limite no n\u00famero total de respostas 1xx. O hook Got1xxResponse pode retornar um erro para interromper o pedido.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server\">Servidor<\/a> agora tem um campo HTTP2 que permite a configura\u00e7\u00e3o das defini\u00e7\u00f5es do protocolo HTTP\/2.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Novos campos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> oferecem uma maneira simples de configurar quais protocolos o servidor ou cliente HTTP utiliza.<\/p>\n<p><\/noindex> <\/p>\n<p>O servidor e o cliente podem ser configurados para suportar conex\u00f5es n\u00e3o criptografadas HTTP\/2.<\/p>\n<p> <noindex><\/p>\n<p>Quando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> cont\u00e9m UnencrypterHTTP2, o servidor aceitar\u00e1 conex\u00f5es HTTP\/2 em portas n\u00e3o criptografadas. O servidor pode aceitar tanto HTTP\/1 quanto HTTP\/2 n\u00e3o criptografado na mesma porta.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Quando <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> cont\u00e9m UnencryptedHTTP2 e n\u00e3o cont\u00e9m HTTP1, o transporte usar\u00e1 HTTP\/2 n\u00e3o criptografado para endere\u00e7os <a rel=\"nofollow\" href=\"http:\/\/.\">http:\/\/.<\/a> Se o transporte estiver configurado para usar HTTP\/1 e HTTP\/2 n\u00e3o criptografado simultaneamente, ele utilizar\u00e1 o HTTP\/1.<\/p>\n<p><\/noindex> <\/p>\n<p>O suporte para HTTP\/2 n\u00e3o criptografado utiliza \"HTTP\/2 com conhecimento pr\u00e9vio\" (RFC 9113, se\u00e7\u00e3o 3.3). O cabe\u00e7alho obsoleto \u201cUpgrade: h2c\u201d n\u00e3o \u00e9 suportado.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip\/\">net\/netip<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Addr\">Addr<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#AddrPort\">AddrPort<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Prefix\">Prefix<\/a> agora implementam interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/url\/\">net\/url<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/url#URL\">URL<\/a> agora tamb\u00e9m implementa a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user\/\">os\/user<\/a><\/h4>\n<p> <noindex><\/p>\n<p>No Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Atual<\/a> agora pode ser usado no Windows Nano Server. A implementa\u00e7\u00e3o foi atualizada para evitar o uso de fun\u00e7\u00f5es da biblioteca NetApi32, que est\u00e1 ausente no Nano Server.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>No Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Atual<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Lookup\">Lookup<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#LookupId\">LookupId<\/a> agora suportam as seguintes contas de servi\u00e7o incorporadas:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>NT AUTHORITYSYSTEM<\/li>\n<li>NT AUTHORITYLOCAL SERVICE<\/li>\n<li>NT AUTHORITYNETWORK SERVICE<\/li>\n<\/ul>\n<p> <noindex><\/p>\n<p>No Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Atual<\/a> foi significativamente acelerado quando o usu\u00e1rio atual est\u00e1 conectado a um dom\u00ednio lento, o que \u00e9 um caso comum para muitos usu\u00e1rios corporativos. O novo desempenho da implementa\u00e7\u00e3o agora est\u00e1 na ordem de milissegundos, em compara\u00e7\u00e3o com a implementa\u00e7\u00e3o anterior, que poderia levar v\u00e1rios segundos, at\u00e9 minutos, para concluir.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>No Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Atual<\/a> agora retorna o usu\u00e1rio propriet\u00e1rio do processo, quando a thread atual se passa por outro usu\u00e1rio. Anteriormente, isso retornava um erro.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/regexp\/\">regexp<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/regexp#Regexp\">Regexp<\/a> agora implementa a interface <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAdapter<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/\">runtime<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Fun\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#GOROOT\">GOROOT<\/a> agora foi declarada obsoleta. No novo c\u00f3digo, deve-se preferir o uso do caminho do sistema para encontrar o bin\u00e1rio \u201cgo\u201d, e usar go env GOROOT para definir GOROOT.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\/\">strings<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pacote <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\">strings<\/a> adiciona v\u00e1rias fun\u00e7\u00f5es para trabalhar com iteradores:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#Lines\">Lines<\/a> retorna um iterador para linhas separadas por nova linha na string.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitSeq\">SplitSeq<\/a> retorna um iterador para todas as substrings da string, separadas pelo delimitador.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitAfterSeq\">SplitAfterSeq<\/a> retorna um iterador para substrings da string, separadas ap\u00f3s cada ocorr\u00eancia do delimitador.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsSeq\">FieldsSeq<\/a> retorna um iterador para substrings da string ao redor de sequ\u00eancias de espa\u00e7os em branco, conforme definido<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unicode#IsSpace\">unicode.IsSpace<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsFuncSeq\">FieldsFuncSeq<\/a> retorna um iterador para substrings da string ao redor de sequ\u00eancias de pontos de c\u00f3digo Unicode que atendem ao predicado.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync\/\">sync<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Implementa\u00e7\u00e3o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync#Map\">sync.Map<\/a> foi alterada, melhorando o desempenho, especialmente para altera\u00e7\u00f5es em dicion\u00e1rios. Por exemplo, \u00e9 menos prov\u00e1vel que haja competi\u00e7\u00e3o entre altera\u00e7\u00f5es em conjuntos n\u00e3o sobrepostos em dicion\u00e1rios grandes, e n\u00e3o requer mais tempo de acumula\u00e7\u00e3o para alcan\u00e7ar um dicion\u00e1rio com baixa competi\u00e7\u00e3o.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Se voc\u00ea encontrar algum problema, defina GOEXPERIMENT=nosynchashtriemap durante a constru\u00e7\u00e3o para voltar \u00e0 implementa\u00e7\u00e3o antiga e, por favor, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/new\">preencha o formul\u00e1rio de problemas<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/\">testing<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Novos M\u00e9todos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Context\">T.Context<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Context\">B.Context<\/a> retornam o contexto que \u00e9 cancelado ap\u00f3s a conclus\u00e3o do teste e antes da execu\u00e7\u00e3o das fun\u00e7\u00f5es de limpeza do teste.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Novos M\u00e9todos <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Chdir\">T.Chdir<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Chdir\">B.Chdir<\/a> podem ser usados para alterar o diret\u00f3rio de trabalho durante a execu\u00e7\u00e3o do teste ou benchmark.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/text\/template\/\">text\/template<\/a><\/h4>\n<p>Templates agora suportam range-over-func e range-over-int.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\/\">time<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">Tempo<\/a> agora implementa as interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> e <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Ports<\/h2>\n<h3>Linux<\/h3>\n<p> <noindex><\/p>\n<p>Como foi <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23#linux\">declarado<\/a> nas notas de lan\u00e7amento do Go 1.23, o Go 1.24 requer o kernel Linux vers\u00e3o 3.2 ou superior.<\/p>\n<p><\/noindex> <\/p>\n<h3>Darwin<\/h3>\n<p>O Go 1.24 \u00e9 o \u00faltimo lan\u00e7amento que funcionar\u00e1 no macOS 11 Big Sur. O Go 1.25 exigir\u00e1 o macOS 12 Monterey ou posterior.<\/p>\n<h3>WebAssembly<\/h3>\n<p>A diretiva do compilador go:wasmexport foi adicionada aos programas Go para exportar fun\u00e7\u00f5es para o host WebAssembly.<\/p>\n<p> <noindex><\/p>\n<p>Na Preview 1 da WebAssembly System Interface (GOOS=wasip1 GOARCH=wasm), o Go 1.24 suporta a constru\u00e7\u00e3o de programas Go como <a rel=\"nofollow\" href=\"https:\/\/github.com\/WebAssembly\/WASI\/blob\/63a46f61052a21bfab75a76558485cf097c0dbba\/legacy\/application-abi.md#current-unstable-abi\">reactor\/library<\/a> especificando a flag de constru\u00e7\u00e3o -buildmode=c-shared.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Mais tipos agora s\u00e3o permitidos como tipos de argumento ou resultado para fun\u00e7\u00f5es go:wasmimport. Em particular, bool, string, uintptr e ponteiros para certos tipos s\u00e3o permitidos (detalhes podem ser vistos em <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/compile#hdr-WebAssembly_Directives\">documenta\u00e7\u00e3o<\/a>), junto com tipos inteiros de 32 e 64 bits e tipos de ponto flutuante, e unsafe.Pointer, que j\u00e1 eram permitidos. Esses tipos tamb\u00e9m s\u00e3o permitidos como tipos de argumento ou resultado para fun\u00e7\u00f5es go:wasmexport.<\/p>\n<p><\/noindex> <\/p>\n<p>Os arquivos de suporte para WebAssembly foram movidos para lib\/wasm de misc\/wasm.<\/p>\n<p>O tamanho da mem\u00f3ria original foi significativamente reduzido, especialmente para pequenos aplicativos WebAssembly.<\/p>\n<h3>Windows<\/h3>\n<p> <noindex><\/p>\n<p>A porta de 32 bits windows\/arm (GOOS=windows GOARCH=arm) foi marcada como quebrada. Detalhes em <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/70705\">#70705<\/a><\/p>\n<p><\/noindex><\/p>\n<p>Fonte: <a \ncontent=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/news\/development\/17884044\">linux.org.ru<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u043e\u0432\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a \u044f\u0437\u044b\u043a\u0430 Go, \u0432\u0435\u0440\u0441\u0438\u044f 1.24, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0441\u043f\u0443\u0441\u0442\u044f \u0448\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u043e\u0441\u043b\u0435 Go 1.23. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430, \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u0440\u0435\u043b\u0438\u0437 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 Go 1. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043e\u0436\u0438\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Go \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u0435\u0436\u0434\u0435. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u044f\u0437\u044b\u043a\u0435 Go 1.24 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0430\u043b\u0438\u0430\u0441\u044b \u0442\u0438\u043f\u043e\u0432: \u0430\u043b\u0438\u0430\u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":121951,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-121950","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/news\/go-1-24\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Go 1.24 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/news\/go-1-24\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2025-02-15T12:22:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-02-15T12:22:29+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Go 1.24 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/news\/go-1-24","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Go 1.24 | ProHoster","og:url":"https:\/\/prohoster.info\/pt\/blog\/news\/go-1-24","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2025-02-15T12:22:29+00:00","article:modified_time":"2025-02-15T12:22:29+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"121950","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 10:38:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2026-01-23 10:38:20","updated":"2026-01-23 10:38:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/121950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=121950"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/121950\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/121951"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=121950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=121950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=121950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}