Struct-upotus
Koosta structeja
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.Powertaic.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
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.