mirror of
https://github.com/sstent/aicyclingcoach-go.git
synced 2026-01-25 16:41:48 +00:00
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
go get github.com/sstent/garmin-connect/garth
Basic Usage
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:
BodyBatteryDataHRVDataSleepDataWeightData
Stats Types
Available stats with List() methods:
DailyStepsDailyStressDailyHRVDailyHydrationDailyIntensityMinutesDailySleep
Error Handling
All methods return errors implementing:
type GarthError interface {
error
Message() string
Cause() error
}
Specific error types:
APIError- HTTP/API failuresIOError- File/network issuesAuthError- 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
CLI Tool
Includes cmd/garth CLI for data export:
go run cmd/garth/main.go --email user@example.com --password pass \
--data bodybattery --start 2023-01-01 --end 2023-01-07