vkorbes / aprendago

Curso completo em português da linguagem Go, de zero a ninja! 🇧🇷
http://aprendago.com
991 stars 180 forks source link

Exercício: Capítulo 20, Exercício 2 (Nível: 9) #60

Open vkorbes opened 3 years ago

vkorbes commented 3 years ago

Exercício: Capítulo 20, Exercício 2 (Nível: 9)

Link para o vídeo:

Use esta thread para compartilhar sua solução, discutir o exercício com os colegas e pedir ajuda caso tenha dificuldades!

an4kein commented 3 years ago

https://play.golang.org/p/4TTmRMU7fKb

Bom! Nao sei se fiz examente conforme o pedido, agora vou assistir o video e ver se ficou certo :)

package main

import "fmt"

/* - Esse exercício vai reforçar seus conhecimentos sobre conjuntos de métodos.
   - Crie um tipo para um struct chamado "pessoa"
   - Crie um método "falar" para este tipo que tenha um receiver ponteiro (*pessoa)
   - Crie uma interface, "humanos", que seja implementada por tipos com o método "falar"
   - Crie uma função "dizerAlgumaCoisa" cujo parâmetro seja do tipo "humanos" e que chame o método "falar"
   - Demonstre no seu código:
       - Que você pode utilizar um valor do tipo "*pessoa" na função "dizerAlgumaCoisa"
       - Que você não pode utilizar um valor do tipo "pessoa" na função "dizerAlgumaCoisa" */

type pessoa struct {
    nome string
}

func (p *pessoa) falar() {
    fmt.Println(p.nome, "diz alguma coisa")
}

type humanos interface {
    falar()
}

func dizerAlgumaCoisa(humanos) {
    fmt.Println("testando apenas.. Sera que funciona?")
    return
}
func main() {

    meu := pessoa{
        nome: "anakein",
    }
    dizerAlgumaCoisa(&meu)
    meu.falar()

}

Output

testando apenas.. Sera que funciona?
anakein diz alguma coisa

Program exited.
alansantosmg commented 3 years ago

Achei super confusa a explicação da resolução sobre a parte de ponteiros. Não entendi nada dessa vez. Consegui resolver o exercicio sem ponteiros. Colocando ponteiro *pessoa deu erro e daí tive que ir fazendo via tentativa erro. Essa parte de interfaces acho super confusa. Ainda estou me acostumando.


/***********************************************************
App: Exercicio 9-2
Author: Alan Santos
Date: 04/29/2021
*************************************************************/

package main

import (
    "fmt"
    "log"
    "runtime"
)

const info = `
Application %s starting.
The binary was build by GO: %s`

type pessoa struct {
    nome      string
    sobrenome string
}

func (p *pessoa) falar() {
    fmt.Printf("Hello %v", p.nome)
}

type humanos interface {
    falar()
}

func dizerAlgumaCoisa(h humanos) {
    h.falar()

}

func main() {

    log.Printf(info, "ex9", runtime.Version())

    p1 := pessoa{"alan", "santos"}

    (&p1).falar()  // esse colei da solution

    p1.falar()

    dizerAlgumaCoisa(&p1) // tentativa erro

}
alansantosmg commented 3 years ago

Esses exercicios mais dificeis, guardo o código da solução, pois depois vou fazendo parecido.

wfrsilva commented 2 years ago

Cap. 20 – Exercícios: Nível #9 – 2 https://go.dev/play/p/xaEffkDdEVN https://github.com/wfrsilva/aprendago/commit/57d99730aac73e5a20a44d4d5599075f1d5cbbe0 image

LelecoNN commented 8 months ago

Playground

package main

import "fmt"

type Pessoa struct {
    Nome      string
    SobreNome string
    Idade     int
    Morada    string
    Salario   float64
}
type Humano interface {
    Falar()
}

func main() {
    p1 := Pessoa{"NElit", "Cristo", 25, "São Tomé", 2250.0}
    p2 := Pessoa{"Leleco", "Neto", 30, "São Tomé e Principe", 1500.6}

    dizerAlgumaCoisa(&p1)
    dizerAlgumaCoisa(&p2)

}

func (f *Pessoa) Falar() {
    fmt.Println("Bom dia, eu sou ", f.Nome, f.SobreNome, "tenho", f.Idade,
        "ano a minha residenciar", f.Morada, "um salario de", f.Salario, "!")

}

func dizerAlgumaCoisa(h Humano) {
    h.Falar()

}
murilo-kendjy commented 1 month ago

Acho que a ideia do exercício era somente reforçar os conhecimentos com métodos, interfaces e ponteitos, porém o exemplo usado não ficou muito claro a "função" do ponteiro. Seria mais interessante um método para alterar a idade, assim seria mais notável.

Exemplo com idade: Com ponteiro Sem ponteiro