Open vkorbes opened 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.
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
}
Esses exercicios mais dificeis, guardo o código da solução, pois depois vou fazendo parecido.
Cap. 20 – Exercícios: Nível #9 – 2
https://go.dev/play/p/xaEffkDdEVN
https://github.com/wfrsilva/aprendago/commit/57d99730aac73e5a20a44d4d5599075f1d5cbbe0
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()
}
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
Exercício: Capítulo 20, Exercício 2 (Nível: 9)
Use esta thread para compartilhar sua solução, discutir o exercício com os colegas e pedir ajuda caso tenha dificuldades!