it-praxisportal/courses/go/05_structs_und_methoden/musterloesung.go

78 lines
1.4 KiB
Go

package main
import (
"fmt"
)
type User struct {
ID int
Username string
Email string
Active bool
}
func NewUser(id int, username, email string) *User {
return &User{
ID: id,
Username: username,
Email: email,
Active: true,
}
}
func (u User) Info() string {
return fmt.Sprintf("User #%d: %s <%s> (Aktiv: %t)", u.ID, u.Username, u.Email, u.Active)
}
func (u *User) Deactivate() {
if u != nil {
u.Active = false
}
}
func (u *User) UpdateEmail(newEmail string) {
if u != nil && newEmail != "" {
u.Email = newEmail
}
}
type AdminUser struct {
User
Role string
SuperAdmin bool
}
func NewAdminUser(id int, username, email, role string, superAdmin bool) *AdminUser {
return &AdminUser{
User: User{
ID: id,
Username: username,
Email: email,
Active: true,
},
Role: role,
SuperAdmin: superAdmin,
}
}
func (a *AdminUser) Permissions() []string {
if a != nil && a.SuperAdmin {
return []string{"READ", "WRITE", "DELETE", "ADMIN"}
}
return []string{"READ", "WRITE"}
}
func main() {
u := NewUser(1, "gopher", "gopher@golang.org")
if u != nil {
fmt.Println(u.Info())
u.UpdateEmail("dev@golang.org")
u.Deactivate()
fmt.Println("Nach Update:", u.Info())
}
admin := NewAdminUser(2, "admin_alice", "alice@cloud.io", "DevOpsLead", true)
if admin != nil {
fmt.Printf("Admin: %s, Rolle: %s, Rechte: %v\n", admin.Username, admin.Role, admin.Permissions())
}
}