Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Utilização Struct

Olá,

Qual a diferença entre usar desta forma:

    var contaDaCris ContaCorrente
    contaDaCris.titular = "Cris"
    contaDaCris.saldo = 500

E a forma apresentada na aula?

    var contaDaCris *ContaCorrente
    contaDaCris = new(ContaCorrente)
    contaDaCris.titular = "Cris"
    contaDaCris.saldo = 500

Pergunto pois percebi que se eu alterar a função sacar para:

func Sacar(valorDoSaque float64, c *ContaCorrente) string {
    podeSacar := valorDoSaque > 0 && valorDoSaque <= c.saldo
    if podeSacar {
        c.saldo -= valorDoSaque
        return "Saque realizado com sucesso"
    } else {
        return "Saldo insuficiente"
    }
}

E chamar a função desta forma:

fmt.Println(Sacar(300, contaDaCris))

A chamada da função não compila se eu criar a contaDaCris da primeira forma, mas funciona se eu criar da forma como foi apresentada na aula ...

Obrigado!

1 resposta
solução!

Quando fazemos var contaDaCris *ContaCorrente estamos declarando um ponteiro.

* também é usado para "desreferenciar" variáveis ​​de ponteiro. Usar um ponteiro nos dá acesso ao valor para o qual o ponteiro aponta. Quando escrevemos

var contaDaCris *ContaCorrente
contaDaCris = new(ContaCorrente)

estamos dizendo "armazene o new(ContaCorrente) no local de memória ao qual contaDaCris se refere". Se tentarmos passar um ContaCorrente para um método que recebe *ContaCorrente, obteremos um erro do compilação porque contaDaCris não é um tipo ContaCorrente, é um tipo *ContaCorrente (ponteiro de ContaCorrente), que só pode receber outro *ContaCorrente (outro ponteiro de ContaCorrente).