A command-line Pokédex application built in Go that lets you explore Pokémon locations, catch Pokémon, and build your own Pokédex using the PokéAPI.
-
Map Navigation: Browse through location areas in the Pokémon world
map- View the next 20 location areasmapb- View the previous 20 location areas
-
Explore Locations: Discover which Pokémon appear in each area
explore <location_area>- List all Pokémon in a specific location
-
Catch Pokémon: Attempt to catch Pokémon and add them to your Pokédex
catch <pokemon_name>- Try to catch a Pokémon (50% success rate)
-
Inspect Pokémon: View detailed stats and types of caught Pokémon
inspect <pokemon_name>- Display a Pokémon's height, weight, types, and stats
-
View Your Collection: See all Pokémon you've caught
pokedex- List all caught Pokémon
-
Smart Caching: Responses are cached for 5 minutes to reduce API calls
- Go 1.25.4 or higher
go build -o pokedex ../pokedexStart the interactive REPL:
$ ./pokedex
Pokedex > Pokedex > map
caspian-sea
cerulean-cave
...
Pokedex > explore cerulean-cave
Found Pokemon:
- articuno
- mew
- mewtwo
Pokedex > catch mewtwo
Throwing a Pokeball at mewtwo...
Caught mewtwo!
Pokedex > inspect mewtwo
Inspecting mewtwo...
Name: mewtwo
Height: 20
Weight: 1220
Types:
- psychic
Stats:
- hp: 106
- attack: 110
- defense: 90
...
Pokedex > pokedex
Caught Pokemon:
- mewtwo
Pokedex > help
Welcome to the Pokedex!
Usage:
exit: Exits the Pokedex application
help: Displays a help message
map: Displays the names of 20 location areas in the Pokemon world
mapb: Displays the names of previous 20 location areas in the Pokemon world
explore <location_area>: Lists the Pokemon in a location area
catch <pokemon_name>: Catches a Pokemon
inspect <pokemon_name>: Inspect a caught Pokemon's details
pokedex: View all caught Pokemon
Pokedex > exit
Closing the Pokedex... Goodbye!
- main.go - CLI REPL, command handlers, and JSON unmarshaling logic
- internal/pokecache/main.go - Thread-safe caching system with automatic expiration
- Entries expire after 5 minutes
- Prevents redundant API calls
- Uses goroutines and mutexes for concurrent safety
- APIResponse: Parses paginated location data from PokéAPI
- Pokemon: Holds Pokémon details (name, height, weight, stats, types)
- LocationArea: Represents Pokémon encounters in a specific area
- Cache: Thread-safe in-memory cache with TTL-based cleanup
The application uses struct tags to map JSON keys to Go fields:
type Pokemon struct {
Name string `json:"name"` // Maps JSON "name" key
Height int `json:"height"` // Maps JSON "height" key
Weight int `json:"weight"` // Maps JSON "weight" key
}- 5-minute TTL for all cached responses
- Background goroutine cleans expired entries
- Mutex-protected concurrent access
- Uses PokéAPI v2 (free, no authentication required)
- Endpoints:
- Location areas:
https://pokeapi.co/api/v2/location-area/ - Pokémon details:
https://pokeapi.co/api/v2/pokemon/{name}
- Location areas:
.
├── main.go # CLI entry point and commands
├── go.mod # Module definition
├── README.md # This file
└── internal/
└── pokecache/
├── main.go # Cache implementation
└── cache_test.go # Cache tests
- Persist caught Pokémon to disk
- Display Pokémon images in the terminal
- Add battle mechanics between caught Pokémon
- Search Pokémon by type or stat range
- Add leaderboards for catching streaks
MIT
Feel free to fork and submit pull requests!