Sobes.tech
Junior

Kas ir saskarnes Go valodā?

sobes.tech AI

Atbilde no AI

Go interfeiss ir metoddokumentu kolekcija. Tas nosaka objekta uzvedibu: ko tas "var spej". Interfeiss neietver datus vai realizaciju metodiem.

Galvenas raksturlielumi:

  1. Neizpausme realizacija: Tips realizē interfeisu neizpausme, ja tas nodrošina visus metodes, kas norādītas interfeisā. Nav nepieciešams skaidri paziņot, ka tips realizē interfeisu.
  2. "Doka tipizācija" (Duck Typing): "Ja tas kvakšķ kā pīle un staigā kā pīle, tad tas ir pīle". Go svarīgi nav objekta tips, bet vai tas realizē nepieciešamo metožu kopumu.
  3. Nulle vērtība: Nulle vērtība interfeisam ir nil. Interfeisa vērtība var būt nil, ja gan tips, gan vērtība tajā ir nil.
  4. Tukšs interfeiss (interface{} vai any): Var glabāt jebkura tipa vērtību. Bieži tiek izmantots darbam ar nezināma tipa datiem vai universālajos konteineros.

Piemērs definīcijai un izmantošanai:

// Definējam interfeisu Greeter
type Greeter interface {
	Greet() string // Metode Greet, kas atgriež virkni
}

// Definējam tipu Person
type Person struct {
	Name string
}

// Person realizē interfeisu Greeter, nodrošinot Greet metodi
func (p Person) Greet() string {
	return "Sveiki, " + p.Name
}

// Definējam tipu Robot
type Robot struct {
	Model string
}

// Robot arī realizē interfeisu Greeter
func (r Robot) Greet() string {
	return "Sveiki, modelis " + r.Model
}

// Funkcija pieņem interfeisu Greeter
func SayHello(g Greeter) {
	fmt.Println(g.Greet()) // Izsauc Greet metodi caur interfeisu
}

func main() {
	person := Person{Name: "Alise"}
	robot := Robot{Model: "RX-800"}

	SayHello(person) // Nodod Person, kas realizē Greeter
	SayHello(robot)  // Nodod Robot, kas realizē Greeter
}

Interfeisi veicina elastīgu un dekuplētu dizainu, ļauj rakstīt funkcijas, kas strādā ar dažādiem datu tipiem, kamēr šie tipi realizē nepieciešamo interfeisu. Tie tiek izmantoti kopīgā koda veidošanā un Go standarta bibliotēkā (piemēram, io.Reader, io.Writer, fmt.Stringer).