Tomoe is a lightweight and extensible HTTP client library for Go, designed to simplify making HTTP requests while providing flexibility, speed, and robust error handling. It supports generics for type-safe responses, retries, parallel execution, and dynamic body data formats such as JSON, form-data, and file uploads.
- Type-Safe Responses: Use generics to ensure type safety and reduce boilerplate.
- Retry Logic: Automatic retry with exponential backoff for resilient requests.
- Parallel Execution: Perform concurrent HTTP requests efficiently using Goroutines.
- Dynamic Body Support: Seamlessly handle JSON, form-data, and file uploads.
- Custom Headers and Query Parameters: Easily configure requests for any use case.
- Timeouts: Control request execution time for better resource management.
go get github.com/zakirkun/tomoe
- Basic Setup
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/zakirkun/tomoe"
)
func main() {
client := NewClient("https://jsonplaceholder.typicode.com", 30*time.Second, 3, 5*time.Second, nil)
ctx := context.Background()
// Single request with retries
opts := RequestOptions{
Method: "GET",
Path: "/todos/1",
}
response, err := client.Do(ctx, opts)
if err != nil {
log.Fatalf("Request Error: %v", err.Error())
}
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
if err != nil {
log.Fatalf("Parse Body Error: %v", err.Error())
}
fmt.Printf("Success: %v", string(body))
}
Contributions are welcome! Please fork the repository and submit a pull request.
Tomoe is licensed under the MIT License. See the LICENSE file for details.
Created by Zakirkun. Inspired by a passion for elegant and efficient code.