Por cierto, aqui les dejo mi codigo... soy muy visual y me gusta ver los mensajes!
package main
import"fmt"type taskList struct { tasks []*task
}type task struct { name string
description string
completed bool
}func(t *taskList)addToList(tl *task){ t.tasks=append(t.tasks, tl)}func(t *task)tagCompleted(){ t.completed=true}func(t *task)updateDescription(description string){ t.description= description
}func(t *task)updateName(name string){ t.name= name
}func(t *taskList)deleteFromList(index int){ t.tasks=append(t.tasks[:index], t.tasks[index+1:]...)}func(t *taskList)printList(){ fmt.Println("------------------------------LISTADETAREAS-----------------------------")for _,task:= range t.tasks{ fmt.Println("----------------------------------------------------------------------------") fmt.Println("") fmt.Println("Nombre:", task.name) fmt.Println("") fmt.Println("Description:", task.description) fmt.Println("")} fmt.Println("----------------------------------------------------------------------------")}func(t *taskList)printListCompleted(){ fmt.Println("-------------------------LISTADETAREASCOMPLETADAS----------------------")for _,task:= range t.tasks{if task.completed{ fmt.Println("----------------------------------------------------------------------------") fmt.Println("") fmt.Println("Nombre:", task.name) fmt.Println("") fmt.Println("Description:", task.description) fmt.Println("") fmt.Println("Completed:", task.completed) fmt.Println("")}} fmt.Println("----------------------------------------------------------------------------")}func main(){t1:=&task{name:"Complete my Go course",description:"Complete my GoCoursefromPlatziinthis week",}t2:=&task{name:"Complete my Python course",description:"Complete my PythonCoursefromPlatziinthis week",completed:true,}t3:=&task{name:"Complete my NodeJS course",description:"Complete my NodeJSCoursefromPlatziinthis week",}lista:=&taskList{tasks:[]*task{ t1, t2,},} lista.addToList(t3) lista.printList() lista.printListCompleted()}
Muy bien hecho este codigo, Uffff eres grande!
Podriamos imprimir las 2 listas en una sola funcion separando en orden cada tipo.
Tengo una consulta, es respecto de las buenas practicas para escribir codigo en Go:
Las identaciones de cuantos espacios deberian ser?
Se utilizan espacios en blanco o tabuladores?
Lo pregunto porque cada lenguage tiene sus "guias" y me gustaria saberlo para asi configurar mi VS para Go
Gracias!
Hola, la recomendación oficial es usar gofmt o go fmt para el formato de nuestro código en go. go fmt usa tabuladores para indentar.
Ejemplo de uso:
go fmt miarchivo.go
El comando arreglara el formato de tu codigo si es que lo necesita.
Yo instale la extensión de go en VS y este se encarga de arreglar el formato usando go fmt.
Aqui dejo el enlace de la documentación go. Ahí mencionan gofmt y el uso de tabuladores para la indentación.
Gracias Luis por tu respuesta, si yo estoy usando VS pero es que a veces por defecto trae una configuracion y no sabia si era la oficial! :)
No es necesario el apuntador en este método pues no se está haciendo ninguna modificación al contenido de la struct.
Aquí adjunto mi código, tiene un separador incluido entre tareas para facilitar la visualización, y también hice una refactorización de código
package main
import("fmt")type taskList struct { tasks []*task
}func(t *taskList)agregarALista(tl *task){ t.tasks=append(t.tasks, tl)}func(t *taskList)eliminarDeLista(index int){// ... desempaquetar los elementos t.tasks=append(t.tasks[:index], t.tasks[index+1:]...)}func(t *taskList)imprimirLista(){for _,e:= range t.tasks{ fmt.Println("\nNombre", e.nombre,"\nDescripcion", e.descripcion,"\nCompletado", e.completado)}}func(t *taskList)imprimirCompletados(done bool){for _,e:= range t.tasks{if e.completado!= done {continue} fmt.Println("\nNombre", e.nombre,"\nDescripcion", e.descripcion,"\nCompletado", e.completado)}}type task struct { nombre string
descripcion string
completado bool
}func(t *task)marcarCompleta(){ t.completado=true}func(t *task)actualizarDescripcion(desc string){ t.descripcion= desc
}func(t *task)actualizarNombre(nombre string){ t.nombre= nombre
}func main(){t0:=&task{nombre:"Completar curso go",descripcion:"Completar el curso de go en esta semana",}t1:=&task{nombre:"Completar curso Python",descripcion:"Completar el curso de go en esta semana",completado:true,}t2:=&task{nombre:"Completar curso Mongo",descripcion:"Completar el curso de go en esta semana",}lista:=&taskList{tasks:[]*task{ t0, t1,},} fmt.Println(lista.tasks[0]) fmt.Println(len(lista.tasks)) lista.agregarALista(t2) lista.imprimirLista() fmt.Println("TAREAS COMPLETADAS") lista.imprimirCompletados(true) fmt.Println("TAREAS PENDIENTES") lista.imprimirCompletados(false)}
package main
import("fmt")type taskList struct { tasks []*task
}func(t *taskList)agregarALista(tl *task){ t.tasks=append(t.tasks, tl)}func( t *taskList)eliminarDeLista(index int){ t.tasks=append(t.tasks[:index], t.tasks[index +1:]...)}func(t *taskList)imprimirLista(){for _,tarea:= range t.tasks{ fmt.Println("Nombre:", tarea.nombre) fmt.Println("Descripcion:", tarea.descripcion) fmt.Println("Completado:", tarea.completado)}}func(t *taskList)imprimirListaCompletados(){for _,tarea:= range t.tasks{if tarea.completado{ fmt.Println("Nombre Tarea:", tarea.nombre) fmt.Println("Descripcion Tarea:", tarea.descripcion)}}}type task struct{ nombre string
descripcion string
completado bool
}func(t *task)marcarCompleta(){ t.completado=true}func(t *task)actualizaDescripcion(descripcion string){ t.descripcion= descripcion
}func(t *task)actualizaNombre(nombre string){ t.nombre= nombre
}func main(){t1:=&task{nombre:"Completar mi curso de Go::",descripcion:"Completare mi curso de Go de Platzi en esta semana::",}t2:=&task{nombre:"Completar mi curso de JavaScript->",descripcion:"Completare mi curso de JavaScript de Platzi en esta semana->",}t3:=&task{nombre:"Completar mi curso de NodeJS..",descripcion:"Completare mi curso de NodeJS de Platzi en esta semana..",}lista:=&taskList {tasks:[]*task{ t1, t2,},} lista.agregarALista(t3) lista.imprimirLista() lista.tasks[0].marcarCompleta() fmt.Println("*** tareas completadas ***") lista.imprimirListaCompletados()}
Presento una maera mas optima con menos tiempo de respuesta y mas estructurada del proyecto, queria agregar un filter para la impresion de listas, pero me veo en la nesecidad de primero ver maps para hacer algo realmente bien implementado:
Función que retorna los elementos completados de una lista de tareas.
<code>func(t *taskList)getCompletedTaskList()*taskList {result:=&taskList{tasks:[]*task{},}for _,task:= range t.tasks{if task.completed{ result.add(task)}}return result
}</code>
Listo :)
Así solucione yo el problema de imprimir las tareas
func(tl *taskList)printListOFTasks(){for _ ,task:= range tl.tasks{ fmt.Println(task.name) fmt.Println(task.description)}}func(tl *taskList)printTasksCompleted(){for _ ,task:= range tl.tasks{if(task.complete){ fmt.Println(task.name)}}}func(tl *taskList)printTaskUncompleted(){for _,task:= range tl.tasks{if(!task.complete){ fmt.Println(task.name)}}}
En mi caso realicé otra función para encapsular la función de imprimir cada tarea
func(tl *taskList)prinTask(t *task){ fmt.Println("{") fmt.Println(" name task:", t.name) fmt.Println(" description task:", t.description) fmt.Println(" isCompleted:", t.isCompleted) fmt.Println("}")}func(tl *taskList)printAllTasks(){ fmt.Println("---------- ALL TASK ----------")for _,task:= range tl.tasks{ tl.prinTask(task)}}func(tl *taskList)printCompletedTasks(){ fmt.Println("---------- COMPLETED TASK ----------")for _,task:= range tl.tasks{if task.isCompleted{ tl.prinTask(task)}}}
Les comparto mi script para capturar n tareas como gusten e imprimir las mismas