🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 接口定义 |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") }