Instala el paquete
Añade el SDK a tu módulo Go con go get.
go get github.com/lix-url/go-sdk/lix
SDK oficial de Go para la API de acortamiento de URL y analítica de enlaces de Lix.li. Cero dependencias externas. Crea enlaces cortos, gestiona grupos y rastrea clics con Go idiomático usando estructuras, errores y tipos de puntero opcionales.
package main import ( "fmt" "log" "github.com/lix-url/go-sdk/lix" ) func main() { client := lix.NewClient("lix_live_xxx") result, err := client.Links().Create("https://example.com", nil) if err != nil { log.Fatal(err) } fmt.Println(result.Link.ShortURL) // https://lix.li/a3b7k2 fmt.Println(result.Usage.Remaining) // 42 }
Construido solo con la biblioteca estándar, cero dependencias externas. Go idiomático con estructuras, errores y tipos de puntero opcionales.
Crea, obtén, actualiza, elimina y lista enlaces cortos. CRUD completo con estructuras tipadas. Tipos de puntero opcionales para campos anulables.
Organiza enlaces en grupos. Crea grupos rotativos para pruebas A/B de páginas de destino. CRUD completo con respuestas de estructuras.
Recupera perfil de cuenta, detalles de plan y límites de uso en tiempo real para enlaces, API y enlaces masivos.
Solo biblioteca estándar. Sin dependencias externas. Huella pequeña, riesgo de cadena de suministro cero.
6 tipos de errores dedicados que envuelven un LixError base. Usa errors.As() para una coincidencia precisa con datos de validación.
Inyecta cualquier cliente compatible con net/http a través de la interfaz HTTPClient. Configura tiempos de espera, proxies o mocks para pruebas.
Go puro sin dependencias externas. Funciona con la biblioteca estándar desde Go 1.22+.
Añade el SDK a tu módulo Go con go get.
go get github.com/lix-url/go-sdk/lix
Pasa tu clave API. Opcionalmente inyecta un HTTPClient personalizado para tiempos de espera, proxies o pruebas.
import "github.com/lix-url/go-sdk/lix" client := lix.NewClient("lix_live_xxx") // With custom HTTPClient httpClient := &http.Client{Timeout: 10 * time.Second} client := lix.NewClient("lix_live_xxx", httpClient)
Acorta una URL y recibe un LinkShortenResult tipado con la URL corta e información de uso.
Crea enlaces cortos con alias personalizados, parámetros UTM, píxeles de seguimiento, protección por contraseña y fechas de expiración. Cada operación devuelve una estructura tipada.
// Create a basic link result, err := client.Links().Create("https://example.com", nil) fmt.Println(result.Link.ShortURL) // With custom alias and UTM opts := lix.NewCreateLinkOptions() opts.Alias = strPtr("my-link") opts.Title = strPtr("My Page Title") opts.Tags = []string{"sale", "promo"} opts.UTM = map[string]string{ "utm_source": "google", "utm_medium": "email", "utm_campaign": "summer", } opts.TrackingPixelIDs = []int{1001, 1002} opts.IsPublic = true result, err := client.Links().Create("https://example.com", opts) // Password protection + expiration opts := lix.NewCreateLinkOptions() opts.Password = strPtr("secret123") opts.ActiveBeforeDatetime = strPtr("2026-12-31T23:59:59+00:00") result, err := client.Links().Create("https://example.com", opts) func strPtr(s string) *string { return &s }
Ejemplo de paginación:
client.Links().List(&limit, &fromID)
devuelve el siguiente lote con ResponseMeta que contiene el total y la URL siguiente. Pasa nil para los valores por defecto de la API.
Los grupos ayudan a categorizar enlaces por campaña, equipo o proyecto. Los grupos rotativos habilitan pruebas A/B distribuyendo el tráfico entre múltiples enlaces.
// Create a regular group group, err := client.Groups().Create("Marketing", nil, false) fmt.Println(group.Name, group.URL) // Create a rotating group for A/B testing group, err := client.Groups().Create( "Landing Pages", strPtr("Rotating pages"), true, ) // Update group group, err := client.Groups().Update( 10, nil, strPtr("Updated description"), false, ) // List with pagination limit := 10 page, err := client.Groups().List(&limit, nil) for _, g := range page.Groups { fmt.Println(g.Name, g.URL) } fmt.Println(page.Meta.Total)
Recupera tu perfil, plan y límites de uso en tiempo real: todo devuelto como estructuras anidadas con mapeo completo de etiquetas JSON.
profile, err := client.Profile().Me() if err != nil { log.Fatal(err) } // Account info fmt.Println(profile.Client.Name, profile.Client.Email) fmt.Println(profile.User.Email) // Plan details fmt.Println(profile.Plan.Name, profile.Plan.EndDatetime) // Usage limits if profile.Usages.Links.Remaining != nil { fmt.Println(*profile.Usages.Links.Remaining) } fmt.Println(profile.Usages.APILinks.Used) fmt.Println(profile.Usages.MassLinks.Limit)
ID, nombre, email, created_datetime
Nombre, email, created_datetime
ID, nombre, start_datetime, end_datetime
Enlaces, API, masivos: cada uno con Limit (*int), Used (int), Remaining (*int)
Captura exactamente lo que necesitas con errors.As(). Todos los errores envuelven LixError. ValidationError incluye los datos completos de errores de validación a nivel de campo en Data.
import "errors" result, err := client.Links().Create("invalid-url", nil) if err != nil { var ve *lix.ValidationError var notFound *lix.NotFoundException var unauth *lix.UnauthorizedError var rateLimit *lix.RateLimitError var server *lix.ServerError switch { case errors.As(err, &ve): // Field-level validation errors fmt.Println("Validation:", ve.Data) case errors.As(err, ¬Found): fmt.Println("Not found") case errors.As(err, &unauth): // Invalid API key case errors.As(err, &rateLimit): // Too many requests case errors.As(err, &server): // 5xx server error default: // Generic Lix or network error log.Fatal(err) } }
400 — Entrada inválida. Accede a Data para errores de campo.
401 — Clave API inválida o autenticación faltante.
404 — Enlace o grupo no encontrado.
429 — Límite de tasa excedido.
500 — Error del servidor inesperado.
Fallo de red / transporte.
Todos los errores envuelven LixError, que implementa error. Usa errors.As() para una coincidencia segura de tipos. Captura la clase base LixError para cualquier error de SDK o apunta a tipos específicos para un manejo granular.
Usa la misma API de Lix.li desde PHP, JavaScript, Python o Go con SDKs adaptados a cada ecosistema.
Instala el SDK, obtén una clave API y comienza a crear enlaces cortos en menos de un minuto.