Advertisement
AntonioVillanueva

Clases Go interface struct

Apr 20th, 2023
1,085
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.75 KB | None | 0 0
  1. /*
  2. Experimentando con clases interface ,struct en go
  3. Antonio Villanueva
  4. */
  5. package main
  6.  
  7. import (
  8.     "fmt"
  9.     "math"
  10. )
  11.  
  12. // Un interface para diferentes geometrias circulo , rectangulo
  13. type geometria interface {
  14.     area() float64
  15.     perimetro() float64
  16. }
  17.  
  18. type rectangulo struct { //Rectangulo
  19.     ancho, alto float64
  20. }
  21.  
  22. // Funciones Rectangulo
  23. func (rect rectangulo) area() float64 { //Area
  24.     return rect.ancho * rect.alto
  25. }
  26.  
  27. func (rect rectangulo) perimetro() float64 { //Perimetro
  28.     return 2*rect.ancho + 2*rect.alto
  29. }
  30.  
  31. type circulo struct { //Circulo
  32.     radio float64
  33. }
  34.  
  35. // Funciones Circulo ...
  36. func (circ circulo) area() float64 { //Area
  37.     return math.Pi * circ.radio * circ.radio
  38. }
  39.  
  40. func (circ circulo) perimetro() float64 { //Perimetro circunferencia
  41.     return 2 * math.Pi * circ.radio
  42. }
  43.  
  44. type trapecio struct { //Triangulo
  45.     base1  float64
  46.     base2  float64
  47.     altura float64
  48. }
  49.  
  50. func (trap trapecio) area() float64 {
  51.     return ((trap.base1 + trap.base2) / 2) * trap.altura
  52. }
  53.  
  54. func (trap trapecio) perimetro() float64 {
  55.  
  56.     //Pitagoras c²=a² +b²
  57.     //calculo base a del triangulo derecho p.e
  58.     a := (trap.base1 - trap.base2) / 2
  59.     b := trap.altura
  60.     //b es la altura , c es un lado
  61.     c := math.Sqrt(a*a + b*b)
  62.  
  63.     //El perimetro es base1+base2+2c
  64.     return trap.base1 + trap.base2 + 2*c
  65.  
  66. }
  67.  
  68. // Imprime las medidas dependiendo del objeto utiliza el interface geometria
  69. func medidas(geo geometria) {
  70.  
  71.     fmt.Printf("tipo de objeto  == %T", geo)
  72.     fmt.Println(geo)
  73.     fmt.Printf("Area %v ", geo.area())
  74.     fmt.Printf("Perimetro %v \n\n", geo.perimetro())
  75. }
  76.  
  77. func main() {
  78.  
  79.     rect := rectangulo{ancho: 7, alto: 3}
  80.     circ := circulo{radio: 9}
  81.     trap := trapecio{base1: 15, base2: 12, altura: 6}
  82.  
  83.     medidas(rect)
  84.     medidas(circ)
  85.     medidas(trap)
  86. }
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement