-
-
Notifications
You must be signed in to change notification settings - Fork 709
Add solution for Challenge 3 by kiramux #663
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| package main | ||
|
|
||
| import "fmt" | ||
|
|
||
| type Employee struct { | ||
| ID int | ||
| Name string | ||
| Age int | ||
| Salary float64 | ||
| } | ||
|
|
||
| type Manager struct { | ||
| Employees []Employee | ||
| } | ||
|
|
||
| // AddEmployee adds a new employee to the manager's list. | ||
| func (m *Manager) AddEmployee(e Employee) { | ||
| // TODO: Implement this method | ||
| m.Employees = append(m.Employees, e) | ||
| } | ||
|
|
||
| // RemoveEmployee removes an employee by ID from the manager's list. | ||
| func (m *Manager) RemoveEmployee(id int) { | ||
| // TODO: Implement this method | ||
| size := len(m.Employees) | ||
| flag := -1 | ||
| for i := range m.Employees { | ||
| if m.Employees[i].ID == id { | ||
| flag = i | ||
| break | ||
| } | ||
| } | ||
| if flag != -1 { | ||
| m.Employees[flag] = m.Employees[size-1] | ||
| m.Employees = m.Employees[:size-1] | ||
| } | ||
| } | ||
|
|
||
| // GetAverageSalary calculates the average salary of all employees. | ||
| func (m *Manager) GetAverageSalary() float64 { | ||
| // TODO: Implement this method | ||
| size := len(m.Employees) | ||
| if size == 0 { | ||
| return 0 | ||
| } | ||
|
|
||
| var sum float64 | ||
| for i := 0; i < size; i++ { | ||
| sum += m.Employees[i].Salary | ||
| } | ||
| avg := sum / float64(size) | ||
| return avg | ||
| } | ||
|
|
||
| // FindEmployeeByID finds and returns an employee by their ID. | ||
| func (m *Manager) FindEmployeeByID(id int) *Employee { | ||
| // TODO: Implement this method | ||
| for i := range m.Employees { | ||
| if m.Employees[i].ID == id { | ||
| return &(m.Employees[i]) | ||
| } | ||
| } | ||
| fmt.Println("Cannot find employee by ID: ", id) | ||
| return nil | ||
| } | ||
|
Comment on lines
+56
to
+65
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Critical: Returning pointer to slice element is unsafe. Returning Additionally, printing the error message directly (line 63) violates separation of concerns. The caller should decide how to handle a not-found case. Apply this diff to return a copy instead and remove direct printing: -func (m *Manager) FindEmployeeByID(id int) *Employee {
+func (m *Manager) FindEmployeeByID(id int) (Employee, bool) {
// TODO: Implement this method
for i := range m.Employees {
if m.Employees[i].ID == id {
- return &(m.Employees[i])
+ return m.Employees[i], true
}
}
- fmt.Println("Cannot find employee by ID: ", id)
- return nil
+ return Employee{}, false
}Then update the caller in - employee := manager.FindEmployeeByID(2)
+ employee, found := manager.FindEmployeeByID(2)
fmt.Printf("Average Salary: %f\n", averageSalary)
- if employee != nil {
- fmt.Printf("Employee found: %+v\n", *employee)
+ if found {
+ fmt.Printf("Employee found: %+v\n", employee)
+ } else {
+ fmt.Printf("Employee not found\n")
}
🤖 Prompt for AI Agents |
||
|
|
||
| func main() { | ||
| manager := Manager{} | ||
| manager.AddEmployee(Employee{ID: 1, Name: "Alice", Age: 30, Salary: 70000}) | ||
| manager.AddEmployee(Employee{ID: 2, Name: "Bob", Age: 25, Salary: 65000}) | ||
| manager.RemoveEmployee(1) | ||
| averageSalary := manager.GetAverageSalary() | ||
| employee := manager.FindEmployeeByID(2) | ||
|
|
||
| fmt.Printf("Average Salary: %f\n", averageSalary) | ||
| if employee != nil { | ||
| fmt.Printf("Employee found: %+v\n", *employee) | ||
| } | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix indentation to use tabs.
The code uses spaces for indentation instead of tabs, which violates Go conventions. Run
gofmtorgo fmtto automatically fix the indentation throughout the file.Apply
gofmtto fix:🤖 Prompt for AI Agents