Rajapintojen upotus
Koosta rajapintoja
Rajapintojen upotus 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.
Rajapintojen koostaminen
Rajapinnat voivat upottaa muita rajapintoja ja yhdistää niiden metodijoukot laajemmaksi sopimukseksi. Vakiokirjasto käyttää tätä kaikkialla.
Upotuksen syntaksi
Lisätkää rajapintatyyppi toisen rajapinnan sisään, jolloin kaikki sen metodit sisältyvät uuteen rajapintaan.
package main
import "fmt"
type Reader interface{ Read() string }
type Writer interface{ Write(s string) }
type ReadWriter interface {
Reader
Writer
}
func main() {
var rw ReadWriter
fmt.Println(rw == nil)
}io.ReadWriter käytännössä
Klassinen esimerkki on io.ReadWriter, joka määritellään upottamalla io.Reader ja io.Writer. Mikä tahansa molemmat metodit sisältävä tyyppi toteuttaa sen.
Koostetun rajapinnan toteuttaminen
Konkreettinen tyyppi toteuttaa yhdistetyn rajapinnan yksinkertaisesti tarjoamalla kaikki vaaditut metodit.
package main
import "fmt"
type Reader interface{ Read() string }
type Writer interface{ Write(s string) }
type ReadWriter interface {
Reader
Writer
}
type File struct{ data string }
func (f *File) Read() string { return f.data }
func (f *File) Write(s string) { f.data = s }
func main() {
var rw ReadWriter = &File{}
rw.Write("hi")
fmt.Println(rw.Read())
}Miksi rajapintoja koostetaan
Pienet rajapinnat on helppo toteuttaa ja testata. Niiden koostaminen muodostaa laajempia sopimuksia vain siellä, missä niitä tarvitaan, joten jokainen osa pysyy mahdollisimman pienenä.
Rakentaminen pienistä osista
Määritelkää kohdennettuja yhden metodin rajapintoja ja yhdistäkää ne sitten.
package main
import "fmt"
type Opener interface{ Open() }
type Closer interface{ Close() }
type OpenCloser interface {
Opener
Closer
}
type Door struct{}
func (Door) Open() { fmt.Println("opened") }
func (Door) Close() { fmt.Println("closed") }
func main() {
var oc OpenCloser = Door{}
oc.Open()
oc.Close()
}Ei päällekkäisiä metodeja
Upotetut rajapinnat eivät saa tuoda päällekkäisiä metodeja, joiden allekirjoitukset ovat ristiriidassa keskenään. Identtiset metodijoukot ovat nykyaikaisessa Go:ssa sallittuja.
Kapeiden rajapintojen hyväksyminen
Funktioiden kannattaa pyytää pienintä tarvitsemansa rajapintaa. Vastaanottakaa io.Reader, ei io.ReadWriteCloser, jos tarvitsette vain lukemista.
package main
import "fmt"
type Reader interface{ Read() string }
func dump(r Reader) { fmt.Println(r.Read()) }
type Buf struct{}
func (Buf) Read() string { return "data" }
func main() {
dump(Buf{})
}io-perhe
Vakiokirjasto koostaa Reader-, Writer- ja Closer-rajapinnoista rajapinnat ReadCloser, WriteCloser ja ReadWriteCloser — kyseessä on selkeä sopimusten verkosto.
Koostetut rajapinnat ohjelmointirajapinnoissa
Palauttakaa laajin rajapinta, jota arvo tukee, mutta hyväksykää funktion käyttöön riittävästä rajapinnoista kapein. Näin saatte mahdollisimman paljon sekä joustavuutta että selkeyttä.
Rajapintojen ja rakenteiden upotus
- Rakenteiden upotus tuo kentät ja metodit käyttöön toiminnallisuuden uudelleenkäyttöä varten
- Rajapintojen upotus yhdistää metodivaatimukset laajemmaksi sopimukseksi
Pikatarkistus
Testatkaa rajapintojen upotusta koskeva osaamisenne.
Kertaus
Olette oppineet rajapintojen upotuksen.
- Luetelkaa rajapinnat toisen rajapinnan sisällä yhdistääksenne metodijoukot
io-paketti koostaa Reader-, Writer- ja Closer-rajapintoja- Pidättehän perusrajapinnat pieninä ja koostatte niitä tarvittaessa
- Hyväksykää funktion tarvitsemista rajapinnoista kapein
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 ”Rajapintojen upotus” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Go Academy-oppimispolun 3 oppituntia, myös oppitunnin “Rajapintojen 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 ”Rajapintojen upotus”?
Koosta rajapintoja 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 ”Rajapintojen 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
- Struct-upotus
- Rajapintojen upotus
- Metodien ylennys
- Koostaminen perinnän sijaan