aprendago icon indicating copy to clipboard operation
aprendago copied to clipboard

Exercício: Capítulo 15, Exercício 2 (Nível: 7)

Open vkorbes opened this issue 4 years ago • 8 comments

Exercício: Capítulo 15, Exercício 2 (Nível: 7)

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!

vkorbes avatar Sep 30 '20 17:09 vkorbes

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

diegoparra avatar Oct 13 '20 10:10 diegoparra

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.

an4kein avatar Mar 01 '21 19:03 an4kein

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.

an4kein avatar Mar 01 '21 21:03 an4kein

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"  
}

alansantosmg avatar Apr 25 '21 05:04 alansantosmg

Cap. 15 – Exercícios: Nível #7 – 2 https://go.dev/play/p/fTZqqRMZESS

image

wfrsilva avatar May 30 '22 23:05 wfrsilva

https://go.dev/play/p/WHd_wjIbuTZ

Harsgaard avatar Dec 16 '22 03:12 Harsgaard

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)
}

UdsonWillams avatar Apr 26 '24 02:04 UdsonWillams

// 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
}

thiagoCalazans-dev avatar May 19 '24 18:05 thiagoCalazans-dev