Sobes.tech
Junior

Go'da alıcıyla birlikte bir yıldız işareti olması ne anlama geliyor?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da bir alıcıda (*) yıldız işareti bulunması, metodun bir işaretçi üzerine çağrıldığı anlamına gelir ve bu, türün değeri üzerinde değil, işaretçi üzerinde çağrıldığı anlamına gelir.

Başlıca sonuçları şunlardır:

  1. Durum değişikliği: Bir işaretçi alıcıyla tanımlanan metod, işaretçinin gösterdiği yapının (veya başka bir türün) alanlarını değiştirebilir. Yıldız olmadan, metod kopya üzerinde çalışır ve içerdeki değişiklikler orijinali etkilemez.
  2. Performans: Bir işaretçi geçmek, büyük bir yapıyı değer olarak geçmekten daha verimli olabilir, çünkü sadece bellek adresi geçirilir, tüm yapı değil.
  3. Nil değerleri: İşaretçi alıcıyla tanımlanan metodlar, nil işaretçileri üzerinde çağrılabilir, bu da bu durumların zarifçe ele alınmasına olanak tanır.

Örnek:

package main

import "fmt"

type Counter struct {
	value int
}

// Değer alıcıyla metod: orijinal Counter'ı değiştirmez
func (c Counter) IncrementByValue() {
	c.value++ // Sadece kopya değiştirilir
}

// İşaretçi alıcıyla metod: orijinal Counter'ı değiştirir
func (c *Counter) IncrementByPointer() {
	c.value++ // Orijinal değer değiştirilir
}

func main() {
	c1 := Counter{value: 0}
	c1.IncrementByValue()
	fmt.Println("IncrementByValue sonrası değer:", c1.value) // 0 yazdırır

	c2 := Counter{value: 0}
	c2.IncrementByPointer()
	fmt.Println("IncrementByPointer sonrası değer:", c2.value) // 1 yazdırır
}