github.com/packtpublishing/learning-functional-programming-in-go@v0.0.0-20230130084745-8b849f6d58c4/Chapter01/01_oop/cars.go (about)

     1  package main
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  )
     7  
     8  type Car struct {
     9  	Model string
    10  }
    11  type Cars []Car
    12  
    13  func (cars *Cars) Add(car Car) {
    14  	myCars = append(myCars, car)
    15  }
    16  
    17  func (cars *Cars) Find(model string) (*Car, error) {
    18  	for _, car := range *cars {
    19  		if car.Model == model {
    20  			return &car, nil
    21  		}
    22  	}
    23  	return nil, errors.New("car not found")
    24  }
    25  
    26  var myCars Cars
    27  
    28  func main() {
    29  	myCars.Add(Car{"IS250"})
    30  	myCars.Add(Car{"Blazer"})
    31  	myCars.Add(Car{"Highlander"})
    32  
    33  	car, err := myCars.Find("Highlander")
    34  	if err != nil {
    35  		fmt.Printf("ERROR: %v", car)
    36  	} else {
    37  		fmt.Printf("Found %v", car)
    38  	}
    39  }
    40