package main
import (
"errors"
"fmt"
"log"
)
type User struct {
ID uint64
Name string
Email string
}
type Role int
const (
Admin Role = iota
UserRole
Guest
)
type UserManager struct {
users map[uint64]*User
}
func NewUserManager() *UserManager {
return &UserManager{
users: make(map[uint64]*User),
}
}
func (m *UserManager) AddUser(user *User) error {
if user.Name == "" {
return errors.New("name cannot be empty")
}
m.users[user.ID] = user
return nil
}
func (m *UserManager) GetUser(userID uint64) (*User, bool) {
user, ok := m.users[userID]
return user, ok
}
func (m *UserManager) CalculateTotal(values []int) int {
total := 0
for _, v := range values {
total += v
}
return total
}
func ProcessUser(user *User) (string, error) {
if user.Name == "" {
return "", errors.New("name cannot be empty")
}
return fmt.Sprintf("User: %s (%s)", user.Name, user.Email), nil
}
func main() {
user := &User{
ID: 1,
Name: "Alice",
Email: "alice@example.com",
}
manager := NewUserManager()
if err := manager.AddUser(user); err != nil {
log.Fatal(err)
}
result, err := ProcessUser(user)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)
numbers := []int{1, 2, 3, 4, 5}
total := manager.CalculateTotal(numbers)
fmt.Printf("Total: %d\n", total)
}