gin 可在 get 路由里按短码查找目标,再用 c.redirect(http.statusfound, target) 返回 302。短码不存在时返回 404。示例使用固定的只读映射。
初始化本地练习模块
在空目录执行,依赖版本以项目生成的 go.mod 为准。
go mod init short-demo go get github.com/gin-gonic/gin

如果依赖要求更新的 Go 版本,按项目的 go.mod 和依赖提示核对工具链。
注册短码路由并返回 Location
保存为 main.go。示例目标由服务端预设,查询参数不会覆盖跳转目标。
package main
import (
"log"
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
targets := map[string]string{"docs": "https://go.dev/doc/"}
router := gin.Default()
router.GET("/s/:code", func(c *gin.Context) {
target, ok := targets[c.Param("code")]
if !ok {
c.JSON(http.StatusNotFound, gin.H{"error": "short code not found"})
return
}
c.Redirect(http.StatusFound, target)
})
log.Fatal(router.Run("127.0.0.1:8080"))
}
静态映射只在启动时创建。需要动态创建短链接时,应把目标校验、权限和存储作为单独的写入流程。
用 curl 分别验证跳转和不存在的短码
启动 go run . 后,在另一个终端执行。
curl -i http://127.0.0.1:8080/s/docs curl -i http://127.0.0.1:8080/s/unknown
第一条应返回 302,Location 指向 https://go.dev/doc/。第二条应返回 404。curl 默认只查看这次响应,方便核对跳转头。










