1+ package main
2+
3+ import "fmt"
4+
5+ type Employee struct {
6+ ID int
7+ Name string
8+ Age int
9+ Salary float64
10+ }
11+
12+ type Manager struct {
13+ Employees []Employee
14+ }
15+
16+ // AddEmployee adds a new employee to the manager's list.
17+ func (m * Manager ) AddEmployee (e Employee ) {
18+ m .Employees = append (m .Employees , e )
19+ }
20+
21+ // RemoveEmployee removes an employee by ID from the manager's list.
22+ func (m * Manager ) RemoveEmployee (id int ) {
23+ foundIndex := m .findEmployeeIndexByID (id )
24+ if foundIndex == - 1 {
25+ return
26+ }
27+
28+ m .Employees = append (m .Employees [:foundIndex ], m .Employees [foundIndex + 1 :]... )
29+ }
30+
31+ // GetAverageSalary calculates the average salary of all employees.
32+ func (m * Manager ) GetAverageSalary () float64 {
33+ if len (m .Employees ) == 0 {
34+ return 0
35+ }
36+
37+ totalSalary := 0.0
38+
39+ for _ , v := range m .Employees {
40+ totalSalary += v .Salary
41+ }
42+
43+ return totalSalary / float64 (len (m .Employees ))
44+ }
45+
46+ // FindEmployeeByID finds and returns an employee by their ID.
47+ func (m * Manager ) FindEmployeeByID (id int ) * Employee {
48+ foundIndex := m .findEmployeeIndexByID (id )
49+ if foundIndex == - 1 {
50+ return nil
51+ }
52+
53+ return & m .Employees [foundIndex ]
54+ }
55+
56+ func (m * Manager ) findEmployeeIndexByID (id int ) int {
57+ for index , v := range m .Employees {
58+ if v .ID == id {
59+ return index
60+ }
61+ }
62+
63+ return - 1
64+ }
65+
66+ func main () {
67+ manager := Manager {}
68+ manager .AddEmployee (Employee {ID : 1 , Name : "Alice" , Age : 30 , Salary : 70000 })
69+ manager .AddEmployee (Employee {ID : 2 , Name : "Bob" , Age : 25 , Salary : 65000 })
70+ manager .RemoveEmployee (1 )
71+ averageSalary := manager .GetAverageSalary ()
72+ employee := manager .FindEmployeeByID (2 )
73+
74+ fmt .Printf ("Average Salary: %f\n " , averageSalary )
75+ if employee != nil {
76+ fmt .Printf ("Employee found: %+v\n " , * employee )
77+ }
78+ }
0 commit comments