Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "errors"
- "fmt"
- )
- type Indirizzo struct {
- Citta string
- CAP string
- }
- type Persona struct {
- Nome string
- Cognome string
- Eta int
- Indirizzo
- //codice string
- }
- func (p *Persona) Invecchia() {
- p.Eta++
- //((*p).Eta)++
- }
- func NewPersona(nome string, cognome string, eta int) (*Persona, error) {
- if nome == "" || cognome == "" {
- return nil, errors.New("nome/cognome non possono essere vuoti")
- }
- if eta < 0 || eta > 130 {
- return nil, fmt.Errorf("età %d non valida", eta)
- }
- p := &Persona{
- Nome: nome,
- Cognome: cognome,
- Eta: eta,
- }
- return p, nil
- }
- // Dipendente "compone" Persona
- type Dipendente struct {
- Persona // embedding
- Mansione string
- }
- // Dirigente "compone" Persona
- type Dirigente struct {
- Persona // embedding
- Livello string
- }
- // Interfaccia che definisce il comportamento comune
- type BonusCalcolabile interface {
- BonusAnzianita() int
- }
- // Implementazione del metodo BonusAnzianita per Dipendente
- func (d Dipendente) BonusAnzianita() int {
- anni := d.Eta - 20
- if anni < 0 {
- return 0
- }
- return anni * 250
- }
- // Implementazione del metodo BonusAnzianita per Dirigente
- func (d Dirigente) BonusAnzianita() int {
- anni := d.Eta - 30
- if anni < 0 {
- return 0
- }
- return anni * 1000
- }
- func main() {
- dip := Dipendente{
- Persona: Persona{
- Nome: "Luca",
- Cognome: "Verdi",
- Eta: 35,
- },
- Mansione: "Tecnico",
- }
- dir := Dirigente{
- Persona: Persona{
- Nome: "Anna",
- Cognome: "Bianchi",
- Eta: 50,
- },
- Livello: "Senior",
- }
- // Uso dell'interfaccia
- var lista []BonusCalcolabile = []BonusCalcolabile{dip, dir} //conformità di tipo!
- for _, p := range lista {
- fmt.Println("Bonus per ")
- switch v := p.(type) {
- case Dipendente:
- fmt.Println(v.Cognome, " ", v.Nome, " Mansione: ", v.Mansione)
- case Dirigente:
- fmt.Println(v.Cognome, " ", v.Nome, " Livello: ", v.Livello)
- default:
- fmt.Println("Ruolo sconosciuto")
- }
- fmt.Println("Bonus anzianita", p.BonusAnzianita())
- }
- // p1 := Persona{}
- // var p2 = Persona{
- // Nome: "Mario",
- // Cognome: "Rossi",
- // Eta: 30,
- // }
- // p2.Invecchia() //Invecchia(p2)
- // p3, err := NewPersona("Mario", "Rossi", 50)
- // if err != nil {
- // fmt.Println("Errore creando p1:", err)
- // } else {
- // fmt.Println("Persona creata:", *p3)
- // }
- // fmt.Println(p1, p2)
- // p2.Citta = "Milano";
- // map1 := make(map[string]int)
- // map1["Tevere"] = 406
- // map2 := map[string]float32{
- // "standard": 69.99,
- // "deluxe": 89,
- // "super deluxe": 129,
- // }
- // map2["stra super deluxe"] = 200
- // //ha la deluxe?
- // costo, esiste := map2["deluxe"]
- // if !esiste {
- // fmt.Println("Edizione non disponibile")
- // } else {
- // fmt.Println("Costo: ", costo)
- // }
- // delete(map2, "deluxe")
- // costo, esiste = map2["deluxe"]
- // if !esiste {
- // fmt.Println("Edizione non disponibile")
- // } else {
- // fmt.Println("Costo: ", costo)
- // }
- // //iteriamo sulla mappa
- // for key, value := range map2 {
- // fmt.Println(key, " Costo: ", value)
- // }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement