go语言实现短信发送实例探究

 更新时间:2024年01月04日 14:21:31   作者:github  
这篇文章主要为大家介绍了go语言实现短信发送实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

特点

  • 支持目前市面多家服务商
  • 一套写法兼容所有平台
  • 简单配置即可灵活增减服务商
  • 内置多种服务商轮询策略、支持自定义轮询策略
  • 统一的返回值格式,便于日志与监控
  • 更多等你去发现与改进...

平台支持

目前支持

  • 阿里云
  • 互亿无线
  • 短信宝
  • 聚合数据
  • 网易云信
  • 微网通联
  • twilio

环境需求

  • Golang >= 1.18

安装

$ go get github.com/pkg6/go-sms

使用

package main
import (
    gosms "github.com/pkg6/go-sms"
    "github.com/pkg6/go-sms/gateways"
    "github.com/pkg6/go-sms/gateways/twilio"
)
func main() {
    sms := gosms.NewParser(gateways.Gateways{Twilio: twilio.Twilio{AccountSID: "ACd********", AuthToken: "***********", TwilioPhoneNumber: "+1********"}})
    // 常规
    sms.Send(18888888888, gosms.MapStringAny{
        "content":  "您的验证码是:****。请不要把验证码泄露给其他人。",
        "template": "SMS_001",
        "data": gosms.MapStrings{
            "code": "6379",
        },
    }, nil)
}

短信内容

由于使用多网关发送,所以一条短信要支持多平台发送,每家的发送方式不一样,但是我们抽象定义了以下公用属性:

  • content 文字内容,使用在像云片类似的以文字内容发送的平台
  • sign_name 签名
  • template 模板 ID,使用在以模板ID来发送短信的平台
  • data 模板变量,使用在以模板ID来发送短信的平台

所以,在使用过程中你可以根据所要使用的平台定义发送的内容。

sms.Send(18888888888, gosms.MapStringAny{
    "content":  "您的验证码是:****。请不要把验证码泄露给其他人。",
    "template": "SMS_001",
    "data": gosms.MapStrings{
        "code": "6379",
    },
}, nil)

你也可以使用闭包来返回对应的值:

sms.Send(18888888888, gosms.MapStringAny{
    "content": func(gateway gosms.IGateway) string {
        return "您的验证码是:****。请不要把验证码泄露给其他人。"
    },
    "template": func(gateway gosms.IGateway) string {
        if gateway.GetName() == "aliyun" {
            return "TP2818"
        }
        return "SMS_001"
    },
    "data": func(gateway gosms.IGateway) gosms.MapStrings {
        return map[string]string{
            "code": "1234",
        }
    },
}, nil)

发送网关

默认使用初始化中的网关发送,如果某一条短信你想要覆盖默认的设置。在 send 方法中使用第三个参数即可:

sms := gosms.NewGateways(twilio.GateWay("ACd********", "***********", "+1***********"))
sms.Send(18888888888, gosms.MapStringAny{
    "content": "您的验证码是:****。请不要把验证码泄露给其他人。",
}, nil)

自定义网关

本拓展已经支持用户自定义网关,你可以很方便的配置即可当成与其它拓展一样的使用:

sms := gosms.NewGateways()
sms.Extend("aliyun", aliyun.GateWay("accessKeyId", "accessKeySecret"))
sms.Send(18888888888, gosms.MapStringAny{
    "content": "您的验证码是:****。请不要把验证码泄露给其他人。",
}, []string{"aliyun"})

自定义网关实现接口

// IGateway 网关
type IGateway interface {
    // I 用于初始化默认值
    I() IGateway
    // GetName 网关名称
    GetName() string
    // Send 发送操作
    Send(to IPhoneNumber, message IMessage) (SMSResult, error)
}

通过Sender函数去发送

package main
import (
    "fmt"
    gosms "github.com/pkg6/go-sms"
    "github.com/pkg6/go-sms/gateways/twilio"
)
func main() {
    gateway := twilio.GateWay("ACd********", "********", "+1111111")
    var message = gosms.MessageContent("Hello from Twilio")
    number := gosms.CHNPhoneNumber(18888888888)
    result, err := gosms.Sender(number, message, gateway)
    if resp, ok := result.ClientResult.Response.(twilio.Response); ok {
        fmt.Println(resp)
    }
    fmt.Println(err)
}

总结

以上就是go语言实现短信发送实例探究的详细内容,更多关于go语言发送短信的资料请关注脚本之家其它相关文章!

相关文章

  • 详解Golang编程中的常量与变量

    详解Golang编程中的常量与变量

    这篇文章主要介绍了详解Golang编程中的常量与变量,是Go语言入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 利用Golang解析json数据的方法示例

    利用Golang解析json数据的方法示例

    Go提供了原生的JSON库,并且与语言本身有效的集成在了一起。下面这篇文章将给大家介绍关于利用Golang解析json数据的方法,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07
  • Golang channel关闭后是否可以读取剩余的数据详解

    Golang channel关闭后是否可以读取剩余的数据详解

    这篇文章主要介绍了Golang channel关闭后是否可以读取剩余的数据,文章通过一个测试例子给大家详细的介绍了是否可以读取剩余的数据,需要的朋友可以参考下
    2023-09-09
  • Golang分布式锁简单案例实现流程

    Golang分布式锁简单案例实现流程

    分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源时,需要通过一些互斥手段来防止彼此之间的干扰以保证一致性,在这种情况下,就需要使用分布式锁了
    2022-12-12
  • GoFrame gmap遍历hashmap listmap treemap使用技巧

    GoFrame gmap遍历hashmap listmap treemap使用技巧

    这篇文章主要为大家介绍了GoFrame gmap遍历hashmap listmap treemap使用技巧的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 详解Go中gin框架如何实现带颜色日志

    详解Go中gin框架如何实现带颜色日志

    当我们在终端上(比如Goland)运行gin框架搭建的服务时,会发现输出的日志是可以带颜色的,那这是如何实现的呢?本文就来和大家简单讲讲
    2023-04-04
  • Golang IOT中的数据序列化与解析过程

    Golang IOT中的数据序列化与解析过程

    这篇文章主要介绍了Golang IOT中的数据序列化与解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 初识Golang Mutex互斥锁的使用

    初识Golang Mutex互斥锁的使用

    在学习操作系统的时候,我们应该都学习过临界区、互斥锁这些概念,用于在并发环境下保证状态的正确性。在 Go语言 里面互斥锁是 sync.Mutex ,我们本篇文章就来学习下为什么要使用互斥锁、如何使用互斥锁,以及使用时的常见问题
    2022-10-10
  • golang 输出重定向:fmt Log,子进程Log,第三方库logrus的详解

    golang 输出重定向:fmt Log,子进程Log,第三方库logrus的详解

    这篇文章主要介绍了golang 输出重定向:fmt Log,子进程Log,第三方库logrus的详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go开发Gin项目添加jwt功能实例详解

    Go开发Gin项目添加jwt功能实例详解

    这篇文章主要为大家介绍了Go开发Gin项目中添加jwt功能实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07

最新评论