SMS-Versand mit Go (Golang): API-Bibliothek golang-sms

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

SMS-Versand mit Go (Golang): API-Bibliothek für die Arbeit mit SMS-Gateways



In der modernen Webentwicklung bleibt das Versenden von SMS-Nachrichten eine gefragte Funktion: Zwei-Faktor-Authentifizierung, Benachrichtigungen, Marketing-Kampagnen. Die Sprache Go (Golang) eignet sich aufgrund ihrer Leistungsfähigkeit und Einfachheit ideal für die Erstellung von Mikrodiensten, die Nachrichten versenden. In diesem Artikel werden wir untersuchen, wie man über die Standardbibliothek net/http und beliebte Pakete für HTTP-Anfragen eine Verbindung zu einem SMS-Gateway über die API herstellt.



Wahl des Ansatzes: Standardbibliothek vs. Frameworks



Go bietet eine leistungsstarke Standardbibliothek, die für die Arbeit mit jeder REST-API ausreicht. Für den SMS-Versand müssen keine schweren Frameworks installiert werden – das integrierte Paket net/http reicht aus. Der Einfachheit halber betrachten wir jedoch auch die Verwendung der Bibliothek resty, die die Erstellung von Anfragen vereinfacht.



Grundlegende Struktur einer HTTP-Anfrage in Go



Jedes SMS-Gateway akzeptiert eine POST-Anfrage mit einem JSON-Body. Betrachten wir ein Beispiel für das Senden einer Nachricht über einen hypothetischen Dienst sms-provider.com:



package main

import ( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" "time")

type SMSRequest struct { Phone string `json:"phone"` Message string `json:"message"` APIKey string `json:"api_key"`}

type SMSResponse struct { Status string `json:"status"` Message string `json:"message"`}

func sendSMS(phone, message, apiKey string) (*SMSResponse, error) { url := "https://api.sms-provider.com/v1/send"

reqBody := SMSRequest{ Phone: phone, Message: message, APIKey: apiKey, }

jsonData, err := json.Marshal(reqBody) if err != nil { return nil, fmt.Errorf("Fehler bei der JSON-Serialisierung: %w", err) }

client := &http.Client{Timeout: 10 * time.Second} resp, err := client.Post(url, "application/json", bytes.NewBuffer(jsonData)) if err != nil { return nil, fmt.Errorf("Fehler bei der HTTP-Anfrage: %w", err) } defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("Fehler beim Lesen der Antwort: %w", err) }

var smsResp SMSResponse if err := json.Unmarshal(body, &smsResp); err != nil { return nil, fmt.Errorf("Fehler beim Parsen der Antwort: %w", err) }

return &smsResp, nil}

func main() { resp, err := sendSMS("+79123456789", "Testnachricht", "your-api-key-123") if err != nil { fmt.Printf("Fehler: %v", err) return } fmt.Printf("Status: %s, Nachricht: %s", resp.Status, resp.Message)}


Verwendung der Bibliothek resty zur Code-Vereinfachung



Die Bibliothek go-resty/resty/v2 reduziert den Umfang des Boilerplate-Codes erheblich. Installation:



go get github.com/go-resty/resty/v2


Beispiel für den SMS-Versand mit resty:



package main

import ( "fmt" "github.com/go-resty/resty/v2")

type SMSResponse struct { Status string `json:"status"` Message string `json:"message"`}

func sendSMSResty(phone, message, apiKey string) (*SMSResponse, error) { client := resty.New() resp, err := client.R(). SetHeader("Content-Type", "application/json"). SetBody(map[string]interface{}{ "phone": phone, "message": message, "api_key": apiKey, }). SetResult(&SMSResponse{}). Post("https://api.sms-provider.com/v1/send")

if err != nil { return nil, fmt.Errorf("Fehler bei der Anfrage: %w", err) }

return resp.Result().(*SMSResponse), nil}

func main() { resp, err := sendSMSResty("+79123456789", "Hallo von Go!", "my-secret-key") if err != nil { fmt.Prin

Empfehlungen