В этом разница между вызовом по значению и вызовом по ссылке. Если вы из C ++, то знайте, что в C ++ тоже самое. И если вы из Java-фона, то помните, что все ссылки на объекты - это просто указатели на объекты на самом деле ... (то есть, когда мы делаем Node node = new Node (); .. узел содержит адрес нового узла) объект создан). Поэтому любой метод объекта (узла) на самом деле вызывается по ссылке (потому что сам узел является указателем) .. поэтому он сводится к тому же примеру, что и выше.

ьзование функции сеттера для структуры, но не работает, как ожидалось:

package main

import "fmt"

type T struct { Val string }

// this setter seems not to work
func (t T) SetVal( s string ) {
        t.Val = s
}

// this setter, using ptr to T, seems to work ok
func (t *T) SetVal2( s string ) {
        (*t).Val = s
}

func main() {
        v := T{"abc"}
        fmt.Println( v )        // prints {abc}
        v.SetVal("pdq")
        fmt.Println( v )        // prints {abc}, was expecting {pdq}!
        v.SetVal2("xyz")
        fmt.Println( v )        // prints {xyz}!
}

Мне не хватает фундаментального понимания - почему нетSetVal работай?

поведение похоже на установку значений вreflect который работает только в том случае, если указан указатель на объект по сравнению с самим объектом

Ответы на вопрос(2)

Ваш ответ на вопрос