Значение и адрес метода в golang

    В golang форма метода struct выглядит следующим образом:

    func (r ReceiverType) funcName(параметры) (результаты)

    Если вы хотите изменить значение члена структуры, его тип ReceiverType должен быть в форме struct* при определении метода. Если ReceiverType равен struct, значения членов структуры изменить нельзя.

    Без лишних слов, проверка кода:

package main

import (
    "fmt"
)

type tag struct {
    value int32
}

func (_tag tag) Change() {
    _tag.value = int32(987)
}

type tag2 struct {
    value int32
}

func (_tag *tag2) Change2() {
    _tag.value = int32(987)
}

func main() {
    _tag := new(tag)
    _tag.value = 123 
    _tag.Change()
    fmt.Println(_tag)
    _tag.Change()
    fmt.Println(_tag)

    _tag2 := tag2{41}
    _tag2.Change2()
    fmt.Println(_tag2)
    _tag2.Change2()
    fmt.Println(_tag2)
}

   В приведенной выше основной функции объект _tag в первом коде имеет форму *tag, но его метод Change не может изменить его значение. Объект _tag во втором фрагменте кода имеет форму *ag, но его метод Change может изменить его значение.

    Если кому интересно, расскажу подробнее.

    Первым параметром метода в golang является его ReceiverType, тогда как метод метода в языках на основе C, таких как C++ и аналогичный ему язык Java, по умолчанию имеет значение class* this. Другими словами, в golang есть два метода: передача значения объекта и передача адреса объекта, тогда как языки серии C в обязательном порядке требуют передачи адреса объекта.

     Это делает это понятным, не так ли?

Supongo que te gusta

Origin blog.csdn.net/menggucaoyuan/article/details/43056261
Recomendado
Clasificación