Useat paluuarvot
Tuplejen palauttaminen ja error-malli
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 errorNimetyt 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.
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
- Funktioiden perusteet ja signatuurit
- Useat paluuarvot
- Vaihtuva-argumenttiset funktiot
- defer, anonyymit funktiot ja sulkeumat