Go Academy · Oppitunti

Useat paluuarvot

Tuplejen palauttaminen ja error-malli

Oppitunti 2/412 vaihetta

Useat paluuarvot on ilmainen Go Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Go Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Go Academy-kurssilla on yhteensä 4 oppituntia.

Miksi useita palautusarvoja?

Go:n funktiot voivat palauttaa useita arvoja, joten output-parametreja tai poikkeuksia ei tarvita. Yleisin malli on palauttaa tulos ja virhe:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

Useiden palautusarvojen käsittely

Kutsuja saa kaikki palautusarvot tuplena. Hylkää tarpeettomat arvot käyttämällä _-merkkiä:

result, err := divide(10, 3)
if err != nil {
    log.Fatal(err)
}
fmt.Println(result)

value, _ := divide(8, 2) // discard error

Nimetyt palautusarvot

Palautusarvoille voi antaa nimet, jolloin niistä tulee funktion sisäisiä muuttujia:

func minMax(nums []int) (min, max int) {
    min, max = nums[0], nums[0]
    for _, n := range nums[1:] {
        if n < min { min = n }
        if n > max { max = n }
    }
    return // naked return
}

Paljaat return-lauseet

Argumentiton return palauttaa nimettyjen palautusmuuttujien arvot. Käyttäkää tätä säästeliäästi — vain lyhyissä funktioissa, joissa nimet kuvaavat tarkoituksen itsestään:

  • Lyhyet funktiot: sopii
  • Pitkät funktiot: heikentää luettavuutta — suosikaa eksplisiittisiä palautuksia

(value, error) -malli

Go-kielen vakiintunut virheenkäsittelymalli:

func readConfig(path string) (Config, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return Config{}, fmt.Errorf("read config: %w", err)
    }
    var cfg Config
    return cfg, json.Unmarshal(data, &cfg)
}

Älkää koskaan ohittako virheitä

Virheiden ohittaminen _-merkillä on vaarallista. Hyvät käytännöt:

  • Tarkistakaa jokainen virhe, ellei ole erityistä syytä toimia toisin
  • Lisätkää virheisiin konteksti käyttämällä fmt.Errorf("op: %w", err)
  • Käyttäkää log.Fatal-funktiota tai panicia vain ohjelman rajapinnoilla, ei kirjastojen syvällä sisällä

Kolmen arvon palautukset

Jotkin funktiot palauttavat kolme arvoa, vaikka tämä on harvinaisempaa:

func parseIPPort(s string) (ip string, port int, err error) {
    // ... parsing logic
    return
}

Structien palauttaminen useiden arvojen sijaan

Milloin palautetaan struct ja milloin useita arvoja:

  • 2–3 vahvasti toisiinsa liittyvää arvoa: useat palautusarvot sopivat
  • Vähintään 4 arvoa tai valinnaisia kenttiä: käyttäkää structia
  • (value, error) -malli: aina useita palautusarvoja

Sijoittaminen ennestään määritettyihin muuttujiin

Käyttäkää =-operaattoria (ei :=-operaattoria), kun sijoitatte arvoja ennen kutsua määritettyihin muuttujiin:

var cfg Config
var err error
cfg, err = loadConfig()
if err != nil { ... }

Useat palautusarvot metodiketjuissa

Go ei tue metodiketjutusta suoraan useiden palautusarvojen kanssa (toisin kuin Rustin Result.map). Käsitelkää virheet jokaisessa vaiheessa väliaikaisten muuttujien avulla:

data, err := fetchData(url)
if err != nil { return err }
parsed, err := parseData(data)
if err != nil { return err }
return save(parsed)

Pikatarkistus

Mitä paljas return tekee Gossa?

Kertaus: useat palautusarvot

Useat palautusarvot ovat keskeinen Go-kielen käytäntö:

  • Funktiot voivat palauttaa useita arvoja sulkeisiin kirjoitettuna luettelona
  • (value, error) -malli on käytössä kaikkialla — tarkistakaa virhe aina
  • Nimetyt palautusmuuttujat mahdollistavat paljaat return-lauseet (käyttäkää niitä säästeliäästi)
  • Käyttäkää _-merkkiä arvojen hylkäämiseen, kun ette tarvitse niitä
  • Suosikaa useita palautusarvoja lähtöparametrien sijaan selkeämpien rajapintojen vuoksi

Seuraavaksi: variadiset funktiot.

Aloita maksutta

Opi Go tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Useat paluuarvot” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Go Academy-oppimispolun 3 oppituntia, myös oppitunnin “Useat paluuarvot”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Go Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Useat paluuarvot”?

Tuplejen palauttaminen ja error-malli Harjoittelet Go Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Go Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Go Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Useat paluuarvot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Go Academy-oppitunnilla?

Kyllä. Jokainen Go Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Funktioiden perusteet ja signatuurit
  2. Useat paluuarvot
  3. Vaihtuva-argumenttiset funktiot
  4. defer, anonyymit funktiot ja sulkeumat
← Takaisin: Go Academy