在 Go (Golang) 中发送短信:API 库概述与实现示例
发送短信是现代 Web 应用的关键功能之一:从双因素认证到订单状态通知。在 Go (Golang) 生态系统中,有多个成熟的库允许您通过流行的网关(Twilio、Vonage、Clickatell、俄罗斯提供商)集成短信发送。在本文中,我们将详细讲解如何使用最佳实践和官方 API 在 Go 中配置短信发送。
为什么选择 Go 来发送短信?
Go 是一种编译型语言,具有出色的并发支持,非常适合异步发送大量消息。借助内置的 goroutines 和通道,您可以处理数千个短信请求而不会阻塞主线程。此外,标准库 net/http 使您可以轻松地与任何短信提供商的 REST API 配合使用。
Go 中用于短信处理的主要库
- twilio-go — Twilio 的官方客户端(最流行的国际服务)。支持短信、彩信、语音通话。
- vonage-go(前身为 Nexmo)— Vonage API 的客户端。
- go-sms — 通用库,支持多个提供商(SMS.ru、Twilio、Clickatell)。
- gosms — 用于任何短信网关的 HTTP 请求的简单封装。
安装库
作为示例,我们将使用 Twilio 的官方客户端。通过 go get 安装包:
go get github.com/twilio/twilio-go对于俄罗斯提供商 SMS.ru,也有一个方便的库:
go get github.com/smsru/smsru-go基本示例:通过 Twilio 发送短信
在开始之前,从 Twilio 控制台获取 Account SID 和 Auth Token。以下是最小的工作代码:
package main
import ( "fmt" "os"
"github.com/twilio/twilio-go" openapi "github.com/twilio/twilio-go/rest/api/v2010")
func main() { // 初始化客户端 client := twilio.NewRestClientWithParams(twilio.ClientParams{ Username: os.Getenv("TWILIO_ACCOUNT_SID"), Password: os.Getenv("TWILIO_AUTH_TOKEN"), })
// 消息参数 params := &openapi.CreateMessageParams{} params.SetTo("+1234567890") // 收件人号码 params.SetFrom("+0987654321") // 您的 Twilio 号码 params.SetBody("你好!这是来自 Go 的测试短信!")
// 发送 resp, err := client.Api.CreateMessage(params) if err != nil { fmt.Println("发送错误:", err) return }
fmt.Println("短信已发送!SID:", *resp.Sid)}通过俄罗斯网关 (SMS.ru) 发送短信
要集成 SMS.ru,请使用 smsru-go 库。代码如下:
package main
import ( "fmt" "os"
"github.com/smsru/smsru-go")
func main() { // 使用 API 密钥创建客户端 client := smsru.NewClient(os.Getenv("SMSRU_API_KEY"))
// 发送单条消息 result, err := client.SendSMS("+79991234567", "你好!这是来自 Go 的测试!") if err != nil { fmt.Println("错误:", err) return }
if result.Status == "OK" { fmt.Println("短信已发送!ID:", result.SmsID) } else { fmt.Println("错误:", result.StatusText) }}使用 goroutines 进行异步发送
Go 的主要优势之一是能够轻松并行发送短信。批量发送示例:
package main
import ( "fmt" "sync")
func sendSMSAsync(client *smsru.Client, phone, message string, wg *sync.WaitGroup) { defer wg.Done() resul