---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: 'Go 1.24 -julkaisun yleiskatsaus: Swiss Table Maps, ML-KEM, os.Root ja testing/synctest'
description: 'Go 1.24:n teknillinen katsaus: Swiss Table -pohjaiset sisäänrakennetut kartat, crypto/mlkem (FIPS 203), TLS Encrypted Client Hello, runtime.AddCleanup, os.Root ja testing/synctest.'
language: fi
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

Go 1.24 on muotoutumassa merkittäväksi julkaisuksi, joka tuo mukanaan joukon parannuksia, jotka keskittyvät suorituskykyyn, tietoturvaan ja kehittäjäkokemukseen. Nämä muutokset pyrkivät tekemään Go:sta entistäkin tehokkaamman ja vaikuttavamman modernien sovellusten rakentamiseen.

## Suorituskyvyn parannus

Yleinen suorituskyvyn parannus, jonka ansiosta suoritinkuormitus pienenee 2–3 % joukossa edustavia suorituskykytestejä. Parannuksiin kuuluu uusi sisäänrakennettu hajautustaulun (map) toteutus, pienten olioiden tehokkaampi muistinvaraus sekä uusi ajonaikaisen järjestelmän sisäinen mutex-toteutus. Tulokset voivat vaihdella sovelluksittain.

## Post-kvanttikryptografia

Paketin `crypto/mlkem` käyttöönotto, joka toteuttaa ML-KEM-768- ja ML-KEM-1024-algoritmit. ML-KEM on post-kvanttinen avainvaihtomekanismi, joka tunnettiin aiemmin nimellä Kyber ja joka on määritelty standardissa FIPS 203. Tämä lisäys valmistaa Go:ta kryptografisen turvallisuuden tulevaisuuteen.

## TLS-parannus

Encrypted Client Hello (ECH) -tuki TLS:ssä. Ominaisuus otetaan käyttöön täyttämällä kenttä `Config.EncryptedClientHelloKeys`, mikä parantaa TLS-yhteyksien yksityisyyttä ja turvallisuutta.

## Uusi Swiss Table -hajautustaulu

Parannettu hajautustaulun (map) toteutus paremman suorituskyvyn saavuttamiseksi. Tämä uusi toteutus perustuu Swiss Tables -rakenteeseen, ja sen voi poistaa käytöstä käännöksen lippuvaihtoehdolla `GOEXPERIMENT=noswissmap`.

## Sync.Map-päivitys

Parannettu suorituskyky `sync.Map`-tyypin muokkauksille. Erillisten avainjoukkojen muokkaukset kilpailevat suuremmissa hajautustauluissa huomattavasti harvemmin, eikä kuormitus tarvitse enää alkulämmitysaikaa saavuttaakseen matalan kilpailutason lukuissa. Jos kohtaat ongelmia, voit palata vanhaan toteutukseen käyttämällä `GOEXPERIMENT=nosynchashtriemap`-asetusta.

## Parannettu JSON-marshalointi

Uusi `omitempty`-tagin asetus älykkäämpää struktuurikenttien poisjättämistä varten JSON-marshaloinnin aikana. Marshaloinnissa struktuurikenttä, jolla on `omitempty`-asetus, jätetään pois, jos sen arvo on nolla-arvo. Jos kentän tyypillä on metodi `IsZero() bool`, sitä käytetään määrittämään, onko arvo nolla-arvo.

## Ajonaikainen siivous

`AddCleanup`-funktion käyttöönotto, joka korvaa `SetFinalizer`-funktion paremman resurssienhallinnan saavuttamiseksi. Toisin kuin `SetFinalizer`, se ei elvytä oliota, johon se on liitetty, finalisointia varten, ja yhteen olioon voidaan liittää useita siivousfunktioita. Uuden koodin tulisi suosia `AddCleanup`-funktiota `SetFinalizer`-funktion sijaan.

## Työkalumääritteet go.mod-tiedostossa

Parannettu suoritettavien riippuvuuksien seuranta `go.mod`-tiedoston työkalumääritteiden (tool directives) avulla. Tämä poistaa tarpeen aiemmalle ratkaisulle, jossa työkalut lisättiin tyhjinä tuonteina tiedostoon, jonka nimi on yleisesti “tools.go”.

## Hakemistoon rajoitettu käyttö

Uusi `os.Root`-tyyppi hallittuja tiedostojärjestelmäoperaatioita varten. `os.Root`-tyyppi mahdollistaa tiedostojärjestelmäoperaatioiden suorittamisen tietyn hakemiston sisällä estäen pääsyn määritetyn polun ulkopuolelle.

## Testauksen parannukset

Uusi `testing/synctest`-paketti samanaikaisen koodin testaamiseen. `synctest.Run`-funktio käynnistää joukon goroutineja eristetyssä “kuplassa”, ja `synctest.Wait`-funktio odottaa, kunnes kaikki nykyisen kuplan goroutinet ovat jääneet odottamaan. Paketti on kokeellinen, ja se on otettava käyttöön asettamalla `GOEXPERIMENT=synctest` käännösaikana.

## Build-välimuisti

`go run`-suoritettavat tiedostot tallennetaan nyt välimuistiin nopeampaa suoritusta varten. Tämä nopeuttaa toistuvia suorituksia sillä seurauksella, että välimuisti kasvaa suuremmaksi.

## Cgo-suorituskyky

Uudet `#cgo noescape`- ja `#cgo nocallback`-merkinnät paremman Cgo-suorituskyvyn saavuttamiseksi. `#cgo noescape cFunctionName` kertoo kääntäjälle, että C-funktiolle välitetty muisti ei pääse karkaamaan. `#cgo nocallback cFunctionName` kertoo kääntäjälle, että C-funktio ei kutsu takaisin mitään Go-funktioita.

## Heikot osoittimet

Tuki heikoille osoittimille, joiden avulla voidaan viitata muistiin turvallisesti estämättä sen vapauttamista. Heikot osoittimet ovat matalan tason primitiivi, joka on tarkoitettu muistitehokkaiden rakenteiden luomiseen, kuten arvojen liittämiseen käyttävät heikot hajautustaulut, kanonisoivat hajautustaulut sekä erilaiset välimuistit.

## Vertailuarvotestien parannus

Uusi `testing.B.Loop`-metodi nopeampia ja virhealttiimpia vertailuarvotestejä varten. Vertailuarvofunktio suoritetaan täsmälleen kerran per `-count`, joten kalliit alustus- ja siivousvaiheet suoritetaan vain kerran. Funktiokutsujen parametrit ja tulokset pidetään elossa, mikä estää kääntäjää optimoimasta silmukan runkoa kokonaan pois.

Go 1.24 on muotoutumassa merkittäväksi julkaisuksi, joka tarjoaa huomattavia parannuksia kielen eri osa-alueilla ja sen ekosysteemissä.

![Overview of Go 1.24](/assets/images/whats-new-in-go1.24/overview.webp)
