Go Academy · Oppitunti

Rajapintojen upotus

Koosta rajapintoja

Oppitunti 2/413 vaihetta

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
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 ”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

  1. Struct-upotus
  2. Rajapintojen upotus
  3. Metodien ylennys
  4. Koostaminen perinnän sijaan
← Takaisin: Go Academy