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语言发送短信的资料请关注脚本之家其它相关文章!

相关文章

  • 如何编写Go语言中间件的实例教程

    如何编写Go语言中间件的实例教程

    不知道大家有没有写过中间件呢,它是怎么写的呢?下面这篇文中就来给大家分享一下使用Go,如何编写中间件,文中通过示例代码介绍的非常详细,供大家参考学习,下面随着小编来一起学习学习吧。
    2018-04-04
  • 详解Golang中string的实现原理与高效使用

    详解Golang中string的实现原理与高效使用

    在Go语言中,无论是字符串常量、字符串变量还是代码中出现的字符串字面量,它们的类型都被统一设置为string,下面就跟随小编一起来了解一下Golang中string的实现原理与高效使用吧
    2024-01-01
  • Go语言算法之寻找数组第二大元素的方法

    Go语言算法之寻找数组第二大元素的方法

    这篇文章主要介绍了Go语言算法之寻找数组第二大元素的方法,以实例形式分析了不排序、只循环一次来实现寻找数组第二大元素的技巧,是比较典型的算法,需要的朋友可以参考下
    2015-02-02
  • Go高级特性探究之HTTP错误处理详解

    Go高级特性探究之HTTP错误处理详解

    在Web应用程序中,HTTP错误处理是非常重要的,它关系到Web应用程序的稳定性和可靠性,本文介绍如何在Go项目中处理HTTP错误,并提供相应的解决方案和实践经验,希望对Go语言Web应用程序的开发者有所帮助
    2023-06-06
  • 用go写的五子棋预测算法的实现

    用go写的五子棋预测算法的实现

    这篇文章主要介绍了用go写的五子棋预测算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • golang如何使用struct的tag属性的详细介绍

    golang如何使用struct的tag属性的详细介绍

    这篇文章主要介绍了golang如何使用struct的tag属性的详细介绍,从例子说起,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 在Colaboratory上运行Go程序的详细过程

    在Colaboratory上运行Go程序的详细过程

    这篇文章主要介绍了在Colaboratory上运行Go程序,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 详解Golang中errors包如何返回自定义error类型

    详解Golang中errors包如何返回自定义error类型

    这篇文章主要为大家详细介绍了Golang中errors包如何返回自定义error类型,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下
    2023-09-09
  • 详解Go语言如何实现并发安全的map

    详解Go语言如何实现并发安全的map

    go语言提供的数据类型中,只有channel是并发安全的,基础map并不是并发安全的,本文为大家整理了三种实现了并发安全的map的方案,有需要的可以参考下
    2023-12-12
  • go gin中间件关于 c.next()、c.abort()和return的使用小结

    go gin中间件关于 c.next()、c.abort()和return的使用小结

    中间件的执行顺序是按照注册顺序执行的,中间件可以通过 c.abort() + retrurn 来中止当前中间件,后续中间件和处理器的处理流程, 这篇文章给大家介绍go gin中间件关于 c.next()、c.abort()和return的使用小结,感兴趣的朋友跟随小编一起看看吧
    2024-03-03

最新评论