【REST2SQL】01RDB关系型数据库REST初设计
【REST2SQL】02 GO连接Oracle数据库
【REST2SQL】03 GO读取JSON文件
【REST2SQL】04 REST2SQL第一版Oracle版实现
【REST2SQL】05 GO 操作 达梦 数据库
【REST2SQL】06 GO 跨包接口重构代码
【REST2SQL】07 GO 操作 Mysql 数据库
【REST2SQL】08 日志重构增加输出到文件log.txt
【REST2SQL】09 给Go的可执行文件exe加图标和版本信息等
【REST2SQL】10 REST2SQL操作指南
【REST2SQL】11 基于jwt-go生成token与验证
【REST2SQL】11 基于jwt-go生成token与验证的Token生成和验证合并到【REST2SQL】
1 Rest2sql目录下新建token子目录
- Rest2sql目录下新建token子目录
- 拷贝 【REST2SQL】11 基于jwt-go生成token与验证 的mytoken.go
- mytoken.go改名为 token.go

2 token.go的代码重构
- 包名改为token
- 屏蔽或删除 main()入口函数
- 重构全局变量,都改为外部不可见,即变量名改为首字母改为小写即可
- 只暴露生成token函数GenerateTokenHandler()和验证token函数ValidateTokenHandler()
- 暴露函数第二个参数重构
重构完成的代码如下:
package token
import (
"crypto/rand"
"encoding/json"
"fmt"
"log"
"net/http"
"time"
jwt "github.com/dgrijalva/jwt-go"
)
// 初始化函数
func init() {
// 实例化计数计时器
counter = NewCounter()
// 初始化随机 Key
key, err := generateRandomString(16)
if err != nil {
log.Fatal(err)
}
// 打印时间戳
fmt.Println("Start At timeStamp :", timeStamp, time.Unix(timeStamp, 0), key)
}
// Counter 定义一个简单的计数器
type Counter struct {
value int
timeStampc int64 // 时间戳,用于定期更新密钥key
}
// 计时器变量实例
var counter *Counter
// NewCounter 创建一个新的计数器
func NewCounter() *Counter {
return &Counter{
value: 0, timeStampc: time.Now().Unix()}
}
// Increment 增加计数器的值
func (c *Counter) Increment() {
c.value++
c.timeStampc = time.Now().Unix()
}
// // Decrement 减少计数器的值
// func (c *Counter) Decrement() {
// c.value--
// }
// // Reset 重置计数器的值为0
// func (c *Counter) Reset() {
// c.value = 0
// }
// GetValue 返回计数器的当前值
func (c *Counter) GetCounter() *Counter {
return c
}

最低0.47元/天 解锁文章
1265





