In Go, o uso de um setter para um tipo de estrutura não funciona como o esperado

Usando uma função setter para uma estrutura, mas não funcionando conforme o esperado:

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}!
}

Estou faltando algum entendimento fundamental - por que nãoSetVal trabalhos

o comportamento é semelhante ao definir valores emreflect que só funciona se for fornecido um ponteiro para o objeto em comparação com o próprio objeto

questionAnswers(2)

yourAnswerToTheQuestion