Go Academy · leksjon

Embedding av grensesnitt

Sett sammen grensesnitt

Leksjon 2 av 413 trinn

Embedding av grensesnitt er en gratis leksjon i Go Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Go Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Go Academy inneholder totalt 4 leksjoner.

Komponer grensesnitt

Grensesnitt kan embedde andre grensesnitt og kombinere metodesettene deres til en større kontrakt. Standardbiblioteket bruker dette overalt.

Embedding-syntaks

List opp en grensesnittype i et annet grensesnitt for å inkludere alle metodene.

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 i praksis

Det klassiske eksempelet er io.ReadWriter, som er definert ved å embedde io.Reader og io.Writer. Alle typer med begge metodene oppfyller grensesnittet.

Oppfylle et sammensatt grensesnitt

En konkret type implementerer det kombinerte grensesnittet ganske enkelt ved å ha alle de nødvendige metodene.

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())
}

Hvorfor komponere grensesnitt

Små grensesnitt er enkle å implementere og teste. Komponering bygger større kontrakter bare der det trengs, slik at hver del holdes minimal.

Bygg fra små deler

Definer fokuserte grensesnitt med én metode, og kombiner dem deretter.

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()
}

Ingen dupliserte metoder

Innebygde grensesnitt må ikke bidra med overlappende metoder med motstridende signaturer. Identiske metodesett er tillatt i moderne Go.

Ta imot smale grensesnitt

Funksjoner bør be om det minste grensesnittet de trenger. Ta io.Reader, ikke io.ReadWriteCloser, hvis det bare skal leses.

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

Standardbiblioteket komponerer Reader, Writer og Closer til ReadCloser, WriteCloser og ReadWriteCloser – et ryddig gitter av kontrakter.

Sammensatte grensesnitt i API-er

Returner det bredeste grensesnittet som en verdi støtter, men ta imot det smaleste grensesnittet funksjonen bruker. Dette gir størst mulig fleksibilitet og tydelighet.

Embedding av grensesnitt kontra strukturer

  • Embedding av strukturer promoterer felt og metoder for gjenbruk av funksjonalitet
  • Embedding av grensesnitt kombinerer metodekrav til en større kontrakt

Rask kontroll

Test kunnskapen om embedding av grensesnitt.

Oppsummering

Her ble embedding av grensesnitt gjennomgått.

  • List grensesnitt i et annet for å slå sammen metodesett
  • io-pakken komponerer Reader, Writer og Closer
  • Hold grunnleggende grensesnitt små, og komponer der det trengs
  • Ta imot det smaleste grensesnittet funksjonen krever
Gratis å komme i gang

Lær deg Go med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Embedding av grensesnitt» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Go Academy, inkludert «Embedding av grensesnitt», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Go Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Embedding av grensesnitt»?

Sett sammen grensesnitt Du øver på Go Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Go Academy?

Ingen tidligere erfaring er nødvendig. Go Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Embedding av grensesnitt»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Go Academy-leksjonen?

Ja. Alle Go Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Struct-embedding
  2. Embedding av grensesnitt
  3. Metodepromotering
  4. Komposisjon fremfor arv
← Tilbake til Go Academy