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