Junior
Go-da qəbuledici yanında ulduz olmasının mənası nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da qəbul edənində (*) ulduz işarəsi mövcuddursa, bu, metodun göstərici üzərində çağırıldığını göstərir və bu, növün dəyəri üzərində deyil, göstərici üzərində çağırıldığını bildirir.
Əsas nəticələri bunlardır:
- Vəziyyətin dəyişdirilməsi: Göstərici qəbul edən metod, göstəricinin göstərdiyi strukturun (və ya başqa bir növün) sahələrini dəyişə bilər. Ulduz olmadan, metod kopya üzərində işləyir və daxilindəki dəyişikliklər orijala təsir etmir.
- Performans: Göstərici ötürmək, böyük strukturu dəyər kimi ötürməkdən daha səmərəli ola bilər, çünki yalnız yaddaş ünvanı ötürülür, bütün struktur deyil.
- Nil dəyərlər: Göstərici qəbul edən metodlar
nilgöstəricilərdə çağırıla bilər, bu da bu halların incəliklə idarə olunmasına imkan verir.
Nümunə:
package main
import "fmt"
type Counter struct {
value int
}
// Dəyər qəbul edən metod: orijinal Counter-ı dəyişmir
func (c Counter) IncrementByValue() {
c.value++ // Yalnız kopya dəyişir
}
// Göstərici qəbul edən metod: orijinal Counter-ı dəyişir
func (c *Counter) IncrementByPointer() {
c.value++ // Orijinal dəyər dəyişir
}
func main() {
c1 := Counter{value: 0}
c1.IncrementByValue()
fmt.Println("IncrementByValue-dən sonra dəyər:", c1.value) // 0 çap edir
c2 := Counter{value: 0}
c2.IncrementByPointer()
fmt.Println("IncrementByPointer-dən sonra dəyər:", c2.value) // 1 çap edir
}