"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que meu método GO não modifica o valor da instância, a menos que eu use um receptor de ponteiro?

Por que meu método GO não modifica o valor da instância, a menos que eu use um receptor de ponteiro?

Postado em 2025-02-06
Navegar:987

Why Doesn't My Go Method Modify the Instance Value Unless I Use a Pointer Receiver?

Método Golang com Pointer Receiver

Ao tentar modificar o valor de uma instância através de um método, é crucial entender o conceito de ponteiro receptores. Neste exemplo, o método setSofieldfield não está funcionando como esperado porque seu receptor não é do tipo de ponteiro. func (i *implementação) setwonefield (newvalue string) { ... }

No entanto, essa alteração introduz um novo problema: a estrutura não implementa mais a interface porque o método getomefield ainda tem um receptor de valor.

func (i *Implementation) SetSomeField(newValue string) {
    ...
}

digite interface iface { SetSomefield (string newvalue) String getomefield () } Tipo de implementação de estrutura { alguma corda de campo } func (i *implementação) getSomefield () string { Retorne I. Algunsfield } func (i *implementação) setwonefield (newvalue string) { I.Pomefield = NewValue } func create () *implementação { Return & Implementation {Somefield: "Hello"} } func main () { var a iface a = create () a.SetSomefield ("mundo") fmt.println (a.getsomefield ()) }

Neste código atualizado, a função Create retorna um ponteiro para a estrutura de implementação, que implementa a interface iface. Consequentemente, a variável A do tipo IFACE pode se referir ao ponteiro para a estrutura da implementação, permitindo que o método Setsomefield modifique seu valor.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3