Instale o pacote
Adicione o SDK ao seu módulo Go com go get.
go get github.com/lix-url/go-sdk/lix
SDK oficial de Go para a API de encurtamento de URL e análise de links do Lix.li. Zero dependências externas. Crie links curtos, gerencie grupos e rastreie cliques com Go idiomático usando estruturas, erros e tipos de ponteiro opcionais.
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 }
Construído apenas com a biblioteca padrão, zero dependências externas. Go idiomático com estruturas, erros e tipos de ponteiro opcionais.
Crie, obtenha, atualize, exclua e liste links curtos. CRUD completo com estruturas tipadas. Tipos de ponteiro opcionais para campos anuláveis.
Organize links em grupos. Crie grupos rotativos para testes A/B de páginas de destino. CRUD completo com respostas de estruturas.
Recupere perfil de conta, detalhes de plano e limites de uso em tempo real para links, API e links massivos.
Apenas biblioteca padrão. Sem dependências externas. Pegada pequena, risco de cadeia de suprimento zero.
6 tipos de erros dedicados que envolvem um LixError base. Use errors.As() para uma correspondência precisa com dados de validação.
Injete qualquer cliente compatível com net/http através da interface HTTPClient. Configure timeouts, proxies ou mocks para testes.
Go puro sem dependências externas. Funciona com a biblioteca padrão a partir do Go 1.22+.
Adicione o SDK ao seu módulo Go com go get.
go get github.com/lix-url/go-sdk/lix
Passe sua chave de API. Opcionalmente injete um HTTPClient personalizado para timeouts, proxies ou testes.
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)
Encurte uma URL e receba um LinkShortenResult tipado com a URL curta e informações de uso.
Crie links curtos com aliases personalizados, parâmetros UTM, pixels de rastreamento, proteção por senha e datas de expiração. Cada operação retorna uma estrutura 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 }
Exemplo de paginação:
client.Links().List(&limit, &fromID)
retorna o próximo lote com ResponseMeta contendo o total e a URL seguinte. Passe nil para os valores padrão da API.
Os grupos ajudam a categorizar links por campanha, equipe ou projeto. Grupos rotativos habilitam testes A/B distribuindo o tráfego entre vários links.
// 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)
Recupere seu perfil, plano e limites de uso em tempo real: tudo retornado como estruturas aninhadas com mapeamento completo de tags 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, nome, email, created_datetime
Nome, email, created_datetime
ID, nome, start_datetime, end_datetime
Links, API, massivos — cada um com Limit (*int), Used (int), Remaining (*int)
Capture exatamente o que você precisa com errors.As(). Todos os erros envolvem LixError. ValidationError inclui os dados completos de erros de validação a nível de campo em 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. Acesse Data para erros de campo.
401 — Chave de API inválida ou autenticação ausente.
404 — Link ou grupo não encontrado.
429 — Limite de taxa excedido.
500 — Erro de servidor inesperado.
Falha de rede / transporte.
Todos os erros envolvem LixError, que implementa error. Use errors.As() para uma correspondência segura de tipos. Capture a classe base LixError para qualquer erro de SDK ou aponte para tipos específicos para tratamento granular.
Use a mesma API do Lix.li do PHP, JavaScript, Python ou Go com SDKs adaptados a cada ecossistema.
Instale o SDK, obtenha uma chave de API e comece a criar links curtos em menos de um minuto.