Add structs
This commit is contained in:
90
structs/structs.go
Normal file
90
structs/structs.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package structs
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
)
|
||||
|
||||
type ShapeMetadata struct {
|
||||
Id int
|
||||
Name string
|
||||
}
|
||||
|
||||
type Shape interface {
|
||||
Area() float64
|
||||
Perimeter() float64
|
||||
}
|
||||
|
||||
type Square struct {
|
||||
ShapeMetadata
|
||||
Size float64
|
||||
}
|
||||
|
||||
type Rectangle struct {
|
||||
ShapeMetadata
|
||||
Length, Breadth float64
|
||||
}
|
||||
|
||||
type Triangle struct {
|
||||
ShapeMetadata
|
||||
A, B, C float64
|
||||
}
|
||||
|
||||
func (s *Square) Area() float64 {
|
||||
return s.Size * s.Size
|
||||
}
|
||||
|
||||
func (s *Square) Perimeter() float64 {
|
||||
return 4 * s.Size
|
||||
}
|
||||
|
||||
func (r *Rectangle) Area() float64 {
|
||||
return r.Length * r.Breadth
|
||||
}
|
||||
|
||||
func (r *Rectangle) Perimeter() float64 {
|
||||
return 2 * (r.Length + r.Breadth)
|
||||
}
|
||||
|
||||
func (t *Triangle) Area() float64 {
|
||||
s := (t.A + t.B + t.C) / 2
|
||||
area := math.Sqrt(s * (s - t.A) * (s - t.B) * (s - t.C))
|
||||
return area
|
||||
}
|
||||
|
||||
func (t *Triangle) Perimeter() float64 {
|
||||
return t.A + t.B + t.C
|
||||
}
|
||||
|
||||
func Structs() {
|
||||
sq := Square{
|
||||
ShapeMetadata: ShapeMetadata{
|
||||
Id: 0,
|
||||
Name: "mysquare",
|
||||
},
|
||||
Size: 10.0,
|
||||
}
|
||||
|
||||
rect := Rectangle{
|
||||
ShapeMetadata: ShapeMetadata{
|
||||
Id: 0,
|
||||
Name: "myrectangle",
|
||||
},
|
||||
Length: 10,
|
||||
Breadth: 5,
|
||||
}
|
||||
|
||||
tri := Triangle{
|
||||
ShapeMetadata: ShapeMetadata{
|
||||
Id: 0,
|
||||
Name: "mytriangle",
|
||||
},
|
||||
A: 2,
|
||||
B: 2,
|
||||
C: 2,
|
||||
}
|
||||
|
||||
fmt.Printf("Triangle: Area = %.2f Perimeter = %.2f\n", tri.Area(), tri.Perimeter())
|
||||
fmt.Printf("Rectangle: Area = %.2f Perimeter = %.2f\n", rect.Area(), rect.Perimeter())
|
||||
fmt.Printf("Square: Area = %.2f Perimeter = %.2f\n", sq.Area(), sq.Perimeter())
|
||||
}
|
||||
Reference in New Issue
Block a user