## 接口定义
|URL | 功能 | 意义 |
| --- | --- |--- |
| /dwz | 测试 | 探活服务 |
| /dwz/generate | 原网址生成短网址 | 生成短网址 |
| /{:dwz} | 访问短网址,跳转原网址 | 服务实现 |
## 实战代码
package main
import (
"context"
"fmt"
"math"
"net/http"
"strconv"
"strings"
"github.com/gin-gonic/gin"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
router := gin.Default() // 创建一个Gin路由器实例
// 测试接口
router.GET("/dwz", func(c *gin.Context) {
// 返回200状态码和问候信息
c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "Hello, World", "data": nil})
})
// 原网址生成短网址
router.GET("/dwz/generate", func(c *gin.Context) {
url := c.Query("url")
if url == "" {
c.JSON(http.StatusOK, gin.H{"code": 1, "msg": "url is required", "data": nil})
return
}
// 生成短网址
dwz, err := originUrl2dwz(url)
if err != nil {
c.JSON(http.StatusOK, gin.H{"code": 1, "msg": err.Error(), "data": nil})
return
}
c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "", "data": map[string]string{"dwz": dwz}})
})
// 访问短网址,跳转原网址
router.GET("/:dwz", func(c *gin.Context) {
// 获取路由参数
dwz := c.Param("dwz")
// v1 数字id
// idInt, err := strconv.ParseInt(dwz, 10, 64)
// v2 更短的id
idInt := conv10(dwz)
// 获取原网址
targetURL, err := dwzID2OriginUrl(idInt)
if err != nil {
c.JSON(http.StatusOK, gin.H{"code": 0, "msg": err.Error(), "data": nil})
return
}
c.Redirect(http.StatusMovedPermanently, targetURL)
})
// 启动服务器,默认在0.0.0.0:8080监听
router.Run(":80")
}