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

Erro na execução do programa

Boa tarde!

Meu programa não deu nenhum erro, porém está apresentando o erro abaixo. Alguem consegue me dizer onde errei?

C:\Users\victorb3125_00\go\src\github.com\victor\banco> go run main.go
# command-line-arguments

.\main.go:20:24: too many arguments in call to contaDaJoana.Decisao
        have (number)
        want (
        
.\main.go:22:23: too many arguments in call to contaDoGean.Decisao
        have (number)
        want () 

MAIN.GO

package main

import (
    "banco/clientes"
    "banco/contas"
    "fmt"
)

func main() {
    contaDaJoana := contas.ContaCorrente{NumeroConta: 1234}
    contaDoGean := contas.ContaCorrente{Titular: clientes.Titular{Nome: "Gean"}, NumeroConta: 5678}
    var escolha int
    fmt.Println("Bem vindo ao Banco X. Digite sua conta")
    fmt.Scan(&escolha)
    if escolha == contaDaJoana.NumeroConta{
        contaDaJoana.Decisao(escolha)
    }else if escolha == contaDoGean.NumeroConta{
        contaDoGean.Decisao(escolha)
    } else {
        fmt.Println("Número inválido")
    }
}

CONTACORRENTE.GO

package contas
import (
    "banco/clientes"
    "fmt"
    "os"
)
type ContaCorrente struct {
    Titular                    clientes.Titular
    NumeroAgencia, NumeroConta int
    saldo                      float64
}

func (c *ContaCorrente) Sacar() string {
    var saca float64
    fmt.Println("Quanto deseja sacar?")
    fmt.Scan(&saca)
    podeSacar := saca > 0 && saca <= c.saldo
    if podeSacar {
        c.saldo -= saca
        return "Saque realizado com sucesso \n"
    } else {
        return "saldo insuficiente \n"
    }
}

func (c *ContaCorrente) Depositar() string {
    var deposita float64
    fmt.Println("Quanto deseja depositar?")
    fmt.Scan(&deposita)
    if deposita > 0 {
        c.saldo += deposita
        return "Depósito efetuado com sucesso \n"
    } else {
        return "Valor deve ser maior de zero \n"
    }
}

func (c *ContaCorrente) Extrato() (string, float64) {
    return "saldo atual:", c.saldo
}

func (c *ContaCorrente) Transferir(contaDestino *ContaCorrente) (float64, string) {
    var valorDaTransferencia float64
    fmt.Println("Digite o valor da Transferência para o " + contaDestino.Titular.Nome)
    fmt.Scan(&valorDaTransferencia)
    if valorDaTransferencia < c.saldo {
        c.saldo -= valorDaTransferencia
        contaDestino.saldo += valorDaTransferencia
        return c.saldo, "Transferencia realizada com sucesso \n"
    } else {
        return c.saldo, "saldo insuficiente"
    }
}

func (c *ContaCorrente) Decisao(escolha int) {
    for {
        var contaDestino *ContaCorrente
        if escolha == c.NumeroConta {
            for {
                fmt.Println("Bem vindo " + c.Titular.Nome + ". Escolha uma opção abaixo:")
                escolha := MenuInicial()
                if escolha == 5 {
                    break
                }
                switch escolha {
                case 1:
                    fmt.Println(c.Depositar())
                case 2:
                    fmt.Println(c.Sacar())
                case 3:
                    fmt.Println(c.Extrato())
                case 4:
                    fmt.Print(c.Transferir(contaDestino))
                case 5:
                    break
                case 6:
                    fmt.Println("Obrigado por vir ao Banco X, volte sempre.")
                    os.Exit(0)
                default:
                    fmt.Println("Não conheço esse comando.")
                    os.Exit(-1)
                }
            }
        } else {
            fmt.Println("Digite novamente o numero da conta")
        }
    }
}

func MenuInicial() int {
    var escolha int
    fmt.Println("1 - Deposito")
    fmt.Println("2 - Saque")
    fmt.Println("3 - Extrato")
    fmt.Println("4 - Trasnferir")
    fmt.Println("5 - Voltar")
    fmt.Println("6 - Sair")
    fmt.Scan(&escolha)
    return escolha
}

CLIENTE.GO

IGUAL AO CURSO.

1 resposta
solução!

Olá, Victor! Tudo bem?

O erro que você está recebendo indica que está passando um argumento (escolha) para os métodos Decisao das instâncias contaDaJoana e contaDoGean. No entanto, esses métodos não estão definidos para receber argumentos.

Na sua função main, você está chamando contaDaJoana.Decisao(escolha) e contaDoGean.Decisao(escolha). Remova o argumento escolha nessas chamadas para corrigir o erro. Por exemplo:

contaDaJoana.Decisao()
contaDoGean.Decisao()

Além disso, ajuste a definição da função Decisao na struct ContaCorrente para não requerer argumentos:

func (c *ContaCorrente) Decisao() {
    // seu código aqui
}

Após fazer essas mudanças, o código deverá funcionar corretamente.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software