Go-string模板?占位符?
文章首发于:clawhub.club
想实现邮件发送时,选择模板功能,于是找了找资料,最开始使用go的text/template,后来发现和我想要的有点区别,最后发现直接用fmt就好了!!!但是学了就学了,记录一下。
text/template传入string123456789101112name := "ClawHub" //建立一个模板,内容是"hello, {{.}}" tmpl, err := template.New("test").Parse("hello, {{.}}") if err != nil { panic(err) } //将string与模板合成,变量name的内容会替换掉{{.}} err = tmpl.Execute(os.Stdout, name) //合成结果放到os.Stdout里 if err != ni ...
验证码实现逻辑设计
文章首发于:clawhub.club
用途
注册
登陆
找回密码
方式
邮件发送
手机短信发送
逻辑1 发送验证码1.1 查看验证码发送记录,看是否能够发送验证码
检查验证码最小发送间隔
检查验证码今日已发送次数
1.2 刷新发送记录
刷新最后发送时间
递增今日发送次数
1.3 存储验证码信息验证码结构
1234567{ “addr”:”123@qq.com”,//邮箱或手机号 “code”:”985764”,//验证码 “type”:”login”,//目的服务 “sendTime”:1509721130,//验证码发送时间戳 “activeMinute”:10//验证码有效时间}
验证码信息直接存到redis中,根据activeMinute加上过期时间
最后发送时间/今日发送次数 也存储在redis中
验证码信息,当天发送次数等,入mongodb
1.4 发送操作将待发送信息放入队列,由邮件或者短信系统发送。
2 验证验证码和缓存中的验证码比较。
本次只是简单的实现邮件发 ...
Go版本邮件发送服务搭建
文章首发于:clawhub.club
简单的画了个架构图:
发送邮件
记录mongo
日志系统
配置文件读取
REST服务
vendor包管理
项目代码结构比较简单的项目结构。
技术核心:发送邮件1234567891011121314func Send(subject, toAddress, toName, body string) error { m := gomail.NewMessage() m.SetAddressHeader("From", "clawhub@163.com", "ClawHub") m.SetAddressHeader("To", toAddress, toName) m.SetHeader("Subject", subject) m.SetBody("text/html", body) d := gomail.NewDialer(EMailSetting.Host, EMailSetting.Port, EMailSe ...
cannot find package golang.org/x/sys/unix
文章首发于:clawhub.club
开发好的go项目,在windows上运行的好好的,等拿到linux上编译时,报错,找不到核心包,用共go get命令也获取不到,查资料说是被墙了,幸好github上又对应的包下载,https://github.com/golang?page=1下载后,成功解决。
123mkdir -p $GOPATH/src/golang.org/xcd $GOPATH/src/golang.org/xgit clone https://github.com/golang/sys.git
参考:http://www.fecshop.com/topic/805
Go-mongodb使用和Go格式化时间问题
文章首发于:clawhub.club
最近再做一个小型邮件发送服务,需要用mongo记录一下邮件发送历史。虽说网上一大堆教程都是不建议用mongo官方的go版本,但是我还是用了,感觉简单的使用,因该碰不到啥坑吧。github地址:https://github.com/mongodb/mongo-go-driver跟着示例就可以跑起来了,参考着官方文档,简单的封装了一下,以备使用。官方文档地址:https://www.mongodb.com/blog/post/mongodb-go-driver-tutorial
上封装的原码:
123456789101112131415161718192021222324252627282930313233343536373839404142package gmongoimport ( "context" "go-email/com/clawhub/pkg/logging" "go-email/com/clawhub/pkg/setting" "go.mongodb.org/m ...
Go-email使用
文章首发于:clawhub.club
想用Go做一个简单的邮件发送服务,所以在github上找了一圈,最后选中:https://github.com/go-gomail/gomail我是使用163邮箱作为发送端,因为以前用过java实现过邮件发送告警,所以还保留者邮箱与密码。简单的实例:
12345678910111213func Send(subject, toAddress, toName, body string) error { m := gomail.NewMessage() m.SetAddressHeader("From", "clawhub@163.com", "ClawHub") m.SetAddressHeader("To", toAddress, toName) m.SetHeader("Subject", subject) m.SetBody("text/html", body) d := gomail.NewDialer(EM ...
defer对函数内变量赋值问题
文章首发于:clawhub.club
问题代码:
123456789101112func Test() error { var err error defer func() { //恢复程序的控制权 iErr := recover() if iErr != nil { err = errors.New("err") } }() panic("error") return err}
发生panic时,变量err赋值不生效。解决后代码:
1234567891011func Test() (err error) { defer func() { //恢复程序的控制权 iErr := recover() if iErr != nil { err = errors.New("err") } }() panic("error") return err}
原因:defer在 ...
Go-头等函数
文章首发于:clawhub.club
这篇文章纯纯的借鉴加复制,参考了Go 系列教程 —— 33. 函数是一等公民(头等函数)虽然说java现在也支持了链式编程,但是对头等函数方面还是很陌生的。
定义支持头等函数(First Class Function)的编程语言,可以把函数赋值给变量,也可以把函数作为其它函数的参数或者返回值。Go 语言支持头等函数的机制。
匿名函数没有名称的函数称为匿名函数(Anonymous Function),要调用一个匿名函数,可以不用赋值给变量。还可以向匿名函数传递参数。
1234567891011package mainimport ( "fmt")func main() { func(n string) { fmt.Println("Welcome", n) }("Gophers")}
用户自定义的函数类型和定义结构体一样,可以定义函数类型,就像HandlerFunc一样。
12// HandlerFunc ...
不带模式和填充来获取AES算法-JAVA与Golang的互通
文章首发于:clawhub.club
重要:在Java中不带模式和填充来获取AES算法的时候,其默认使用AES/ECB/PKCS5Padding!!!
1 Java的AES加解密如果把Cipher.getInstance(“AES”);中的”AES”换成”AES/ECB/PKCS5Padding”,效果是一样的。
1.1 加密操作123456789101112131415/** * Description: 加密操作 <br> * * @param data 待加密数据 * @param key 密钥 * @return 加解密后的信息 * @throws Exception <br> */ public static byte[] encrypt(byte[] data, byte[] key) throws Exception { Key secretKey = new SecretKeySpec(key, "AES"); ...
Gin+ini+redis+log+mysql+cron+govendor框架搭建
文章首发于:clawhub.club
最近学习Go,在看各种文档,博客,别人写的代码。最后搭建了一个纯API应用框架。
选用Gin框架做web服务
分层思想
配置文件采用:github.com/go-ini/ini
日志采用go.uber.org/zap/zapcore和gopkg.in/natefinch/lumberjack.v2
redis:github.com/go-redis/redis
orm:github.com/jinzhu/gorm操作mysql
校验框架采用:github.com/astaxie/beego/validation
Token方案:github.com/dgrijalva/jwt-go
工具包:github.com/Unknwon/com
导入导出excel:github.com/360EntSecGroup-Skylar/excelize和github.c ...