aprendago
aprendago copied to clipboard
Exercício: Capítulo 15, Exercício 2 (Nível: 7)
Exercício: Capítulo 15, Exercício 2 (Nível: 7)
Use esta thread para compartilhar sua solução, discutir o exercício com os colegas e pedir ajuda caso tenha dificuldades!
Me atrapalhei um pouco na hora de passar o ponteiro estava usando o "*" ao invés de "&", mas no final deu certo kkk
https://play.golang.org/p/PIv0vrXGIEf
https://play.golang.org/p/hbHisF-YnYg
package main
import "fmt"
/* - Crie um struct "pessoa"
- Crie uma função chamada mudeMe que tenha *pessoa como parâmetro.
Essa função deve mudar um valor armazenado no endereço *pessoa.
- Dica: a maneira "correta" para fazer dereference de um valor em um struct seria (*valor).campo
- Mas consta uma exceção na documentação. Link: https://golang.org/ref/spec#Selectors
- "As an exception, if the type of x is a named pointer type and (*x).f is a valid selector expression
denoting a field (but not a method),
- → x.f is shorthand for (*x).f." ←
- Ou seja, podemos usar tanto o atalho p1.nome quanto o tradicional (*p1).nome
- Crie um valor do tipo pessoa;
- Use a função mudeMe e demonstre o resultado.
*/
type Pessoa struct {
nome string
}
func mudeMe(p Pessoa) string {
novoNome := &p.nome
*novoNome = "eduardo"
return p.nome
}
func main() {
colaborador := Pessoa{
nome: "anakein",
}
fmt.Println(mudeMe(colaborador))
}
Output
eduardo
Program exited.
https://play.golang.org/p/PE0oRax9dxL
Realizei alguns ajustes, me fez fixar melhor em relacao o retorno de uma funcao
package main
import (
"fmt"
)
/* - Crie um struct "pessoa"
- Crie uma função chamada mudeMe que tenha *pessoa como parâmetro. Essa função deve mudar um valor armazenado no endereço *pessoa.
- Dica: a maneira "correta" para fazer dereference de um valor em um struct seria (*valor).campo
- Mas consta uma exceção na documentação. Link: https://golang.org/ref/spec#Selectors
- "As an exception, if the type of x is a named pointer type and (*x).f is a valid selector expression denoting a field (but not a method),
- → x.f is shorthand for (*x).f." ←
- Ou seja, podemos usar tanto o atalho p1.nome quanto o tradicional (*p1).nome
- Crie um valor do tipo pessoa;
- Use a função mudeMe e demonstre o resultado.
*/
type Pessoa struct {
nome string
sobrenome string
idade int
trabalha bool
}
func mudeMe(p Pessoa) string {
novoNome := &p.nome
*novoNome = "eduardo"
dados := fmt.Sprintf("Novo nome: %v\nSobrenome: %s\nIdade: %d\nTrabalha?: %t", *novoNome, p.sobrenome, p.idade, p.trabalha)
return dados
}
func main() {
colaborador := Pessoa{
nome: "anakein",
sobrenome: "ank",
idade: 1337,
trabalha: false,
}
fmt.Println(mudeMe(colaborador))
}
Output
Novo nome: eduardo
Sobrenome: ank
Idade: 1337
Trabalha?: false
Program exited.
Muito bom esse exercicio. Me mostrou na prática a utilidade dos ponteiros.
package main
import "fmt"
type pessoa struct {
nome string
sobrenome string
}
func main() {
p1 := pessoa{"alan", "Santos"}
fmt.Println(p1)
mudeMe(&p1)
fmt.Println(p1)
}
func mudeMe(p *pessoa) {
p.nome = "Zarlan" // prefiro esta notação
(*p).sobrenome = "Zantos"
}
Cap. 15 – Exercícios: Nível #7 – 2 https://go.dev/play/p/fTZqqRMZESS
https://go.dev/play/p/WHd_wjIbuTZ
package main
import "fmt"
type Pessoa struct {
nome string
sobrenome string
idade int
}
// Ideia que tive
func MudeMe_1(p Pessoa) Pessoa {
pointer := &p.nome
*pointer = "Um Novo Nome lhe foi dado"
return p
}
// Formato passado pela professora.
func MudeMe_2(p *Pessoa) *Pessoa {
(*p).nome = "Um Novo Nome lhe foi dado"
return p
}
// Formato passado pela professora que a linguagem diz que também é aceitavel.
func MudeMe_3(p *Pessoa) *Pessoa {
p.nome = "Um Novo Nome lhe foi dado"
return p
}
func main() {
pessoa1 := Pessoa{"Udson", "Willams", 27}
pessoa2 := Pessoa{"João", "Maria", 27}
pessoa3 := Pessoa{"Fernando", "Sousza", 27}
fmt.Println(pessoa1)
fmt.Println(pessoa2)
fmt.Println(pessoa3)
fmt.Println("Endereço das pessoas 1, 2 e 3")
fmt.Println(&pessoa1.nome, &pessoa2.nome, &pessoa3.nome)
fmt.Println("---------------------------------------------")
mudeme_1 := MudeMe_1(pessoa1)
mudeme_2 := MudeMe_2(&pessoa2)
mudeme_3 := MudeMe_3(&pessoa3)
fmt.Println(mudeme_1) // DO tipo pessoa
fmt.Println(*mudeme_2) // Tipo ponteiro de pessoa
fmt.Println(*mudeme_3) // Tipo ponteiro de pessoa
fmt.Println("Endereço de pessoas 1, 2 e 3")
fmt.Println(&pessoa1.nome, &pessoa2.nome, &pessoa3.nome)
}
// You can edit this code!
// Click here and start typing.
package main
import "fmt"
/*- Crie um struct "pessoa"
- Crie uma função chamada mudeMe que tenha *pessoa como parâmetro. Essa função deve mudar um valor armazenado no endereço *pessoa.
- Dica: a maneira "correta" para fazer dereference de um valor em um struct seria (*valor).campo
- Mas consta uma exceção na documentação. Link: https://golang.org/ref/spec#Selectors
- "As an exception, if the type of x is a named pointer type and (*x).f is a valid selector expression denoting a field (but not a method),
- → x.f is shorthand for (*x).f." ←
- Ou seja, podemos usar tanto o atalho p1.nome quanto o tradicional (*p1).nome
- Crie um valor do tipo pessoa;
- Use a função mudeMe e demonstre o resultado.*/
type pessoa struct {
name string
age int64
}
func main() {
pessoa1 := pessoa{name: "luigi", age: 14}
fmt.Println(pessoa1)
mudeMe(&pessoa1)
fmt.Println(pessoa1)
}
func mudeMe(p *pessoa) {
p.name = "mario"
p.age = 15
}