Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Métodos y funciones

7/30
Recursos

Aportes 7

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Super importante este apartado para entender las diferencias entre los value y pointers receivers.
https://tour.golang.org/methods/4

Básicamente si queres actualizar los valores de tu struct “instanciado” usa pointer, en otras ocasiones, como por ejemplo solo usar los valores del struct, se puede usar value reciver.

struct Employee en Go 😄

package main

import "fmt"

type Employee struct {
	id   int
	name string
}

func (e *Employee) SetId(id int) {
	e.id = id
}

func (e *Employee) SetName(name string) {
	e.name = name
}

func (e *Employee) GetId() int {
	return e.id
}

func (e *Employee) GetName() string {
	return e.name
}

func main() {
	e := Employee{}
	e.id = 1
	e.name = "Ana"
	e.SetId(5)
	e.SetName("Luis")
	fmt.Println(e.GetId())
	fmt.Println(e.GetName())
}

Tambien podemos agregar el metodo String para definir como se va a imprimir la estructura 😄

package main

import "fmt"

type Employee struct {
	id   int
	name string
}

// Reciver functions
func (e Employee) String() string {
	return fmt.Sprintf("ID: %d, Name: %s", e.id, e.name)
}

func (e *Employee) SetName(name string) {
	e.name = name
}

func (e *Employee) GetName() string {
	return e.name
}

func (e *Employee) SetId(id int) {
	e.id = id
}

func (e *Employee) GetId() int {
	return e.id
}

func main() {
	e := Employee{}
	fmt.Printf("%+v\n", e)

	e.id = 1
	e.name = "Jane"
	fmt.Printf("%+v\n", e)

	e.SetId(5)
	e.SetName("John")
	fmt.Printf("%+v\n", e)

	fmt.Println(e.GetId())
	fmt.Println(e.GetName())
}

Apuntes y código con explicación:

  • Algunos lenguajes de programación implementan la filosofía que TODO debe ser un objeto, sin embargo, no siempre es algo aplicable, por ejemplo, en una librería con utilidades que no pertenecen a un dominio específico.
package main

import "fmt"

/*Equivalente a clases, nos permiten definier
algunas propiedades*/
type Employee struct {
	id   int    //Propiedad id
	name string //Propiedad nombre
}

/*Esto es un receive function de go que nos
sirven como metodos o funciones*/
func (e *Employee) SetId(id int) {
	e.id = id
}

func (e *Employee) SetName(name string) {
	e.name = name
}

func (e *Employee) GetId() int {
	return e.id
}

func (e *Employee) GetName() string {
	return e.name
}

func main() {
	e := Employee{}          //Creamos nuevo Employee
	fmt.Printf("%v", e)      //Imprimimos el empleado
	e.id = 0                 //Le damos un id
	e.name = "Benjamin"      //Le damos un nombre
	fmt.Printf("%v", e)      //Imprimimos nuevamente
	e.SetId(5)               //Modificamos el id con el nuevo metodo
	e.SetName("Manuel")      //Modificamos el name con el nuevo metodo
	fmt.Printf("%v", e)      //Imprimimos el employee modificado
	fmt.Println(e.GetId())   //Obtenemos el id del employee
	fmt.Println(e.GetName()) //Obtenemos el name del employee
}

Mi aporte -Con la palabra clave new. Como en otros lenguajes.

package main
import (
	"fmt"
	// "strconv"
)

type Employee struct{

	id int
	name string
}

func main(){
	p := new(Employee)
	 
	p.setId(1)
	p.setName("Javier")
	p.getDatos()

}

func (p *Employee ) setId(id int){
	p.id = id
}

func (p Employee ) getId() int{
	return p.id 
}

func (p *Employee ) setName(name string){
	p.name = name
}

func (p Employee ) getName() string{
	return p.name
}

func (p Employee) getDatos(){
	fmt.Println(p)
}

codigo con algunos comentarios:

package main

import "fmt"

// Clase o struct empleado
type Employee struct {
	id   int
	name string
}

// funcion o metodo SetId
func (e *Employee) SetId(id int) {
	e.id = id
}

// funcion o metodo SetName
func (e *Employee) SetName(name string) {
	e.name = name
}

// funcion o metodo para obtener el id
func (e *Employee) GetId() int {
	return e.id
}

// funcion o metodo para obtener el nombre
func (e *Employee) GetName() string {
	return e.name
}

func main() {
	e := Employee{}

	// asignamos valores directamente.
	e.id = 1
	e.name = "Name"
	fmt.Println("%v", e)

	// asignamos valores mediante metodos.
	e.SetId(5)
	e.SetName("Carlos")
	fmt.Println("%v", e)

	// imprimimos llamando a los metodos.
	fmt.Println(e.GetId())
	fmt.Println(e.GetName())

}

package main

import "fmt"

type Employee struct {
	id   int
	name string
}

func (e *Employee) SetId(id int) {
	e.id = id
}

func (e *Employee) SetName(name string) {
	e.name = name
}

func (e *Employee) GetId() int {
	return e.id
}

func (e *Employee) GetName() string {
	return e.name
}

func main() {
	e := Employee{}
	fmt.Printf("%+v\n", e)
	e.SetId(3)
	e.SetName("Marco")
	fmt.Printf("%+v\n", e)
}