## 接口定義
|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")
}