Sobes.tech
Junior

Mida tähendab tähe olemasolu vastuvõtja kõrval Go-s?

sobes.tech AI

Vastus AI-lt

Go keeles tähistab täheke (*) vastuvõtja juures, et meetod kutsutakse viit tüüpi eksemplarile, mitte väärtusele.

Peamised tagajärjed:

  1. Seisundi muutmine: Viit-vastuvõtjaga meetod võib muuta struktuuri (või muu tüübi) välju, millele viit näitab. Ilma tähekesteta töötab meetod koopia peal ning muudatused sees ei mõjuta algset.
  2. Jõudlus: Viite edastamine võib olla tõhusam kui suure struktuuri väärtusena edastamine, kuna edastatakse ainult mälu aadress, mitte kogu struktuur.
  3. Nil väärtused: Viit-vastuvõtja meetodeid saab kutsuda nil viidetega, mis võib olla kasulik selliste juhtumite elegantseks käsitlemiseks.

Näide:

package main

import "fmt"

type Counter struct {
	value int
}

// Väärtuse vastuvõtja meetod: ei muuda algset Counterit
func (c Counter) IncrementByValue() {
	c.value++ // muudetakse ainult koopia
}

// Viit-vastuvõtja meetod: muudab algset Counterit
func (c *Counter) IncrementByPointer() {
	c.value++ // algne väärtus muudetakse
}

func main() {
	c1 := Counter{value: 0}
	c1.IncrementByValue()
	fmt.Println("Väärtus pärast IncrementByValue:", c1.value) // prindib 0

	c2 := Counter{value: 0}
	c2.IncrementByPointer()
	fmt.Println("Väärtus pärast IncrementByPointer:", c2.value) // prindib 1
}