Go Academy · Oppitunti

Struct-upotus

Koosta structeja

Oppitunti 1/413 vaihetta

Struct-upotus on ilmainen Go Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.

Rakenteiden koostaminen

Go-kielessä ei ole luokkaperintää. Sen sijaan kieli tarjoaa upotuksen: rakenteen voi sijoittaa toisen rakenteen sisään ilman kentän nimeä, jolloin sen kentät ja metodit voidaan käyttää uudelleen.

Nimettömät kentät

Upotettu kenttä ilmoitetaan pelkän tyypin perusteella ilman nimeä. Sen jäsenet tuodaan ulomman rakenteen käyttöön.

package main

import "fmt"

type Engine struct{ Power int }

type Car struct {
	Engine
	Brand string
}

func main() {
	c := Car{Engine: Engine{Power: 150}, Brand: "Coddy"}
	fmt.Println(c.Power, c.Brand)
}

Promotoitujen kenttien käyttäminen

Voitte lukea c.Power-kentän suoraan, vaikka Power kuuluu upotettuun Engine-rakenteeseen. Tätä kutsutaan kentän promootioksi.

Täysi polku toimii edelleen

Upotetun rakenteen voi aina saavuttaa suoraan sen tyypin nimen avulla.

package main

import "fmt"

type Engine struct{ Power int }
type Car struct{ Engine }

func main() {
	c := Car{Engine{200}}
	fmt.Println(c.Engine.Power)
	fmt.Println(c.Power)
}

Upotus ja nimetty kenttä

Nimetty kenttä (engine Engine) edellyttää muotoa c.engine.Power. Upotus (Engine) tuo jäsenet suoraan käyttöön, joten voitte kirjoittaa c.Power. Upotus ilmaisee on eräänlainen -suhdetta.

Upotettujen rakenteiden alustaminen

Käyttäkää tyyppinimeä kentän avaimena yhdistelmäliteraalissa.

package main

import "fmt"

type Address struct{ City string }
type User struct {
	Address
	Name string
}

func main() {
	u := User{Address: Address{City: "Istanbul"}, Name: "Mert"}
	fmt.Println(u.Name, "in", u.City)
}

Useita upotuksia

Rakenteeseen voi upottaa useita tyyppejä, jolloin niiden kentät yhdistyvät.

package main

import "fmt"

type Timestamps struct{ Created string }
type Author struct{ Name string }
type Post struct {
	Timestamps
	Author
	Title string
}

func main() {
	p := Post{Timestamps{"today"}, Author{"Ada"}, "Hello"}
	fmt.Println(p.Title, p.Name, p.Created)
}

Nimitörmäykset

Jos kahdella upotetulla tyypillä on samanniminen kenttä, epäselvä viittaus aiheuttaa käännösvirheen — viittaus on täsmennettävä tyypin nimellä.

Ulomman rakenteen tekemä peittäminen

Ulommassa rakenteessa ilmoitettu kenttä peittää samannimisen promotoidun kentän. Täsmentämättömässä käytössä ulompi kenttä voittaa.

package main

import "fmt"

type Base struct{ ID int }
type Item struct {
	Base
	ID int
}

func main() {
	i := Item{Base{1}, 99}
	fmt.Println(i.ID, i.Base.ID)
}

Osoittimen upotus

Myös osoitintyypin voi upottaa. Jäsenet promotoidaan edelleen, mutta osoitin on alustettava, jotta nil-viittaukselta vältytään.

package main

import "fmt"

type Logger struct{ Prefix string }
type Service struct{ *Logger }

func main() {
	s := Service{Logger: &Logger{Prefix: "[svc]"}}
	fmt.Println(s.Prefix)
}

Milloin upotusta kannattaa käyttää

  • Yhteisten kenttien uudelleenkäyttö (aikaleimat ja tunnisteet)
  • Monipuolisempien tyyppien rakentaminen pienemmistä tyypeistä
  • Syvän sisäkkäisyyden ja pitkien käyttöpolkujen välttäminen

Pikatarkistus

Testatkaa rakenteiden upotusta koskeva osaamisenne.

Kertaus

Olette oppineet rakenteiden upotuksen.

  • Nimettömät kentät promotoivat jäsenet ulompaan rakenteeseen
  • Käyttäkää muotoa c.Power tai c.Engine.Power
  • Ulommat kentät peittävät promotoidut kentät
  • Törmäykset edellyttävät täsmällistä tyyppimäärettä
  • Myös osoittimen upotus toimii
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 ”Struct-upotus” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Go Academy-oppimispolun 3 oppituntia, myös oppitunnin “Struct-upotus”. 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 ”Struct-upotus”?

Koosta structeja 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 1/4.

Kuinka kauan ”Struct-upotus”-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. Struct-upotus
  2. Rajapintojen upotus
  3. Metodien ylennys
  4. Koostaminen perinnän sijaan
← Takaisin: Go Academy