Sitominen structeihin
Unmarshalaa asetukset
Sitominen structeihin on ilmainen Go Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.
Irrallisista avaimista struct-rakenteeseen
GetString-funktion kutsuminen kaikkialla levittää merkkijonoavaimet ympäri koodia. Konfiguraation unmarshaling tyypitettyyn struct-rakenteeseen antaa kenttien nimet käännösaikaiseen tarkistukseen ja koko rakenteen voi nähdä yhdestä paikasta.
Config-structin määrittäminen
Määritä struct-rakenne, jonka kentissä on mapstructure-tagit, jotta Viper tietää, mikä konfiguraatioavain vastaa mitäkin kenttää. Jokaisen kentän jälkeen tulee tagi, kuten mapstructure:"host", joka kirjoitetaan oikeassa Go-lähdekoodissa takakenoihin.
type ServerConfig struct {
Host string // tag: mapstructure host
Port int // tag: mapstructure port
}
type Config struct {
Server ServerConfig // tag: mapstructure server
Debug bool // tag: mapstructure debug
}Unmarshaling-kutsun tekeminen
Kun konfiguraatio on luettu, pura se struct-rakenteeseen:
var cfg Config
if err := viper.Unmarshal(&cfg); err != nil {
log.Fatalf("unable to decode config: %v", err)
}
fmt.Println(cfg.Server.Port)Miksi mapstructure eikä json
Viper käyttää mapstructure-kirjastoa, koska konfiguraatio voi tulla monista formaateista, kuten YAML:stä, ympäristömuuttujista ja TOML:sta, eikä vain JSON:sta. mapstructure-tagi on formaatista riippumaton ja purkaa arvot yleisestä map-rakenteesta.
Yhden alirakenteen unmarshaling
Voit purkaa vain yhden osion UnmarshalKey-funktiolla:
var sc ServerConfig
viper.UnmarshalKey("server", &sc)
fmt.Println(sc.Host, sc.Port)Sisäkkäiset kentät ja slice-kentät
mapstructure käsittelee sisäkkäiset rakenteet ja slicet automaattisesti:
- Sisäkkäiset struct-rakenteet vastaavat sisäkkäisiä konfiguraatio-osioita
[]string-kenttä vastaa YAML- tai JSON-taulukkoa
Slice-kentässä olisi mapstructure:"hosts"-tagi, joka kirjoitetaan oikeassa lähdekoodissa takakenoihin.
type Config struct {
Hosts []string // tag: mapstructure hosts
}Kenttien oletusarvot
Jos avain puuttuu eikä oletusarvoa ole asetettu, kenttä saa Go-kielen nolla-arvon: 0, tyhjän merkkijonon tai false-arvon. Yhdistä struct-sidonta ja SetDefault, jotta saat käyttökelpoiset arvot varmasti.
Puretun struct-rakenteen validointi
Validoi struct-rakenne unmarshalingin jälkeen. Yleinen käytäntö on Validate()-metodi, joka palauttaa virheen mahdottomista yhdistelmistä, kuten portista 0 tai tyhjästä isännästä.
func (c Config) Validate() error {
if c.Server.Port == 0 {
return fmt.Errorf("server.port is required")
}
return nil
}Dekoodausvirheet ovat tyypitettyjä
Jos arvo ei sovi kentän tyyppiin (esimerkiksi merkkijono, vaikka odotetaan int-arvoa), dekoodaus palauttaa kenttää kuvaavan virheen. Tarkistakaa virhe aina ja tuokaa se näkyviin sen sijaan, että jättäisitte sen huomiotta.
Sama ajatus encoding/json-paketilla
Vakiokirjastolla JSON voidaan dekoodata samalla tavalla. Eksplisiittisten struct tagien avulla se täyttää tyypitetyt kentät, kun taas map antaa yleisen tavan käyttää tietoja. Alla oleva suoritettava esimerkki käyttää sisäkkäistä map-rakennetta, jotta pelaaja voi suorittaa sen ilman struct tageja.
Suoritettava: sisäkkäisen konfiguraation dekoodaus
Tämä itsenäinen ohjelma dekoodaa sisäkkäisen JSON-konfiguraation yleiseksi map-rakenteeksi ja lukee sisäkkäiset kentät jäljitellen sitä, miten Unmarshal täyttää struct-rakenteen.
package main
import (
"encoding/json"
"fmt"
)
func main() {
raw := "{\"server\":{\"host\":\"localhost\",\"port\":8080},\"debug\":true}"
var c map[string]any
if err := json.Unmarshal([]byte(raw), &c); err != nil {
panic(err)
}
srv := c["server"].(map[string]any)
fmt.Printf("%v:%v debug=%v\n", srv["host"], srv["port"], c["debug"])
}Pikatesti
Testatkaa, miten hyvin ymmärrätte konfiguraation sitomisen struct-rakenteisiin.
Kertaus
Opitte sitomaan konfiguraation struct-rakenteisiin:
- Käyttäkää
mapstructure-tageja javiper.Unmarshal(&cfg)-kutsua UnmarshalKeydekoodaa yhden alirakenteen- Sisäkkäiset struct-rakenteet ja slicet dekoodataan automaattisesti
- Lisätkää
Validate()-metodi virheellisten yhdistelmien havaitsemiseksi ajoissa
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 ”Sitominen structeihin” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Go Academy-oppimispolun 3 oppituntia, myös oppitunnin “Sitominen structeihin”. 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 ”Sitominen structeihin”?
Unmarshalaa asetukset 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 4/4.
Kuinka kauan ”Sitominen structeihin”-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
- Asetustiedostojen lukeminen
- Ympäristömuuttujat
- Oletusarvot ja seuranta
- Sitominen structeihin