github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/1-functional-fundamentals/ch03-hof/03_hof/main.go (about)

     1  package main
     2  
     3  import (
     4  	. "hof"
     5  	"log"
     6  	"os"
     7  	"github.com/julienschmidt/httprouter"
     8  	"net/http"
     9  )
    10  
    11  func init() {
    12  	log.SetFlags(log.Lshortfile | log.Ldate)
    13  	log.SetOutput(os.Stdout)
    14  }
    15  
    16  
    17  func main() {
    18  
    19  	if os.Getenv("RUN_HTTP_SERVER") == "TRUE" {
    20  		router := httprouter.New()
    21  		router.GET("/cars", CarsIndexHandler)
    22  		router.GET("/cars/:id", CarHandler)
    23  		log.Println("Listening on port 8000")
    24  		log.Fatal(http.ListenAndServe(":8000", router))
    25  	} else {
    26  
    27  		cars := LoadCars()
    28  		log.Printf("cars: %+v", cars)
    29  
    30  		//PrintCars("ByMake - Honda", cars.Filter(ByMake("Honda")))
    31  		//
    32  		//PrintCars("Numeric", cars.Filter(ByHasNumber()))
    33  		//
    34  		//PrintCars("Foreign, Numeric, Toyota",
    35  		//	cars.Filter(ByForeign()).
    36  		//		Filter(ByHasNumber()).
    37  		//		Filter(ByMake("Toyota")))
    38  		//
    39  		//PrintCars("Domestic, Numeric, GM",
    40  		//	cars.Filter(ByDomestic()).
    41  		//		Filter(ByHasNumber()).
    42  		//		Filter(ByMake("GM")))
    43  		//
    44  		//moreCars := LoadMoreCars()
    45  		//
    46  		//PrintCars("More Cars, Domestic, Numeric, GM",
    47  		//	cars.AddCars(moreCars).
    48  		//		Filter(ByDomestic()).
    49  		//		Filter(ByHasNumber()).
    50  		//		Filter(ByMake("GM")))
    51  		//
    52  		//PrintCars("More Cars, Domestic, Numeric, Ford",
    53  		//	cars.AddCars(moreCars).
    54  		//		Filter(ByDomestic()).
    55  		//		Filter(ByHasNumber()).
    56  		//		Filter(ByMake("Ford")))
    57  		//
    58  		//
    59  		//PrintCars("Numeric, Foreign, Map Upgraded",
    60  		//	cars.Filter(ByHasNumber()).
    61  		//		Filter(ByForeign()).
    62  		//		Map(Upgrade()))
    63  		//
    64  		//PrintCars("Filter Honda, Reduce JSON",
    65  		//	cars.Filter(ByMake("Honda")).
    66  		//		Reduce(JsonReducer(cars), Collection{}))
    67  		//
    68  		//PrintCars("Reduce, Honda, JSON",
    69  		//	cars.Reduce(MakeReducer("Honda", cars), Collection{}).
    70  		//		Reduce(JsonReducer(cars), Collection{}))
    71  		//
    72  		//PrintCars2("Reduce - Lexus",
    73  		//	cars.Filter(ByMake("Lexus")).
    74  		//		Reduce2(CarTypeReducer(cars), []CarType{}))
    75  		//
    76  		//PrintCars("ByModel - Accord up/downgraded",
    77  		//	cars.Filter(ByModel("Accord")).
    78  		//		Map(Upgrade()).
    79  		//		Map(Downgrade()))
    80  
    81  		PrintCars("GenerateCars(1, 3)",
    82  			cars.GenerateCars(1, 3))
    83  
    84  		PrintCars("GenerateCars(1, 14), Domestic, Numeric, JSON",
    85  			cars.GenerateCars(1, 14).
    86  				Filter(ByDomestic()).
    87  				Map(Upgrade()).
    88  				Filter(ByHasNumber()).
    89  				Reduce(JsonReducer(cars), Collection{}))
    90  
    91  	}
    92  }
    93