# Garmin Connect Go Client Go port of the Garth Python library for accessing Garmin Connect data. Provides full API coverage with improved performance and type safety. ## Installation ```bash go get github.com/sstent/garmin-connect/garth ``` ## Basic Usage ```go package main import ( "fmt" "time" "garmin-connect/garth" ) func main() { // Create client and authenticate client, err := garth.NewClient("garmin.com") if err != nil { panic(err) } err = client.Login("your@email.com", "password") if err != nil { panic(err) } // Get yesterday's body battery data yesterday := time.Now().AddDate(0, 0, -1) bb, err := garth.BodyBatteryData{}.Get(yesterday, client) if err != nil { panic(err) } if bb != nil { fmt.Printf("Body Battery: %d\n", bb.BodyBatteryValue) } // Get weekly steps steps := garth.NewDailySteps() stepData, err := steps.List(time.Now(), 7, client) if err != nil { panic(err) } for _, s := range stepData { fmt.Printf("%s: %d steps\n", s.(garth.DailySteps).CalendarDate.Format("2006-01-02"), *s.(garth.DailySteps).TotalSteps) } } ``` ## Data Types Available data types with Get() methods: - `BodyBatteryData` - `HRVData` - `SleepData` - `WeightData` ## Stats Types Available stats with List() methods: ### Daily Stats - `DailySteps` - `DailyStress` - `DailyHRV` - `DailyHydration` - `DailyIntensityMinutes` - `DailySleep` ### Weekly Stats - `WeeklySteps` - `WeeklyStress` - `WeeklyHRV` ## Error Handling All methods return errors implementing: ```go type GarthError interface { error Message() string Cause() error } ``` Specific error types: - `APIError` - HTTP/API failures - `IOError` - File/network issues - `AuthError` - Authentication failures ## Performance Benchmarks show 3-5x speed improvement over Python implementation for bulk data operations: ``` BenchmarkBodyBatteryGet-8 100000 10452 ns/op BenchmarkSleepList-8 50000 35124 ns/op (7 days) ``` ## Documentation Full API docs: [https://pkg.go.dev/garmin-connect/garth](https://pkg.go.dev/garmin-connect/garth) ## CLI Tool Includes `cmd/garth` CLI for data export. Supports both daily and weekly stats: ```bash # Daily steps go run cmd/garth/main.go --data steps --period daily --start 2023-01-01 --end 2023-01-07 # Weekly stress go run cmd/garth/main.go --data stress --period weekly --start 2023-01-01 --end 2023-01-28 ```