使用Golang和GoFr构建URL缩短服务

使用Golang和GoFr构建URL缩短服务 很高兴在Medium上分享我的最新文章!🚀

学习如何通过使用Go和GoFr构建一个URL缩短器来简化你的链接。 本文探讨了开发过程以及GoFr如何简化Web应用程序的构建。

文章链接:LinkedIn

#Technical Discussion

1 回复

更多关于使用Golang和GoFr构建URL缩短服务的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用GoFr构建URL缩短服务是个很好的选择,它提供了快速开发Web应用所需的核心功能。以下是一个基本的实现示例:

package main

import (
    "github.com/gofr-dev/gofr"
    "math/rand"
    "time"
)

type URLMapping struct {
    ShortURL string `json:"short_url"`
    LongURL  string `json:"long_url"`
}

var urlStore = make(map[string]string)

func generateShortCode() string {
    const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    rand.Seed(time.Now().UnixNano())
    b := make([]byte, 6)
    for i := range b {
        b[i] = charset[rand.Intn(len(charset))]
    }
    return string(b)
}

func main() {
    app := gofr.New()

    // 创建短链接
    app.POST("/shorten", func(c *gofr.Context) (interface{}, error) {
        var req struct {
            URL string `json:"url"`
        }
        
        if err := c.Bind(&req); err != nil {
            return nil, err
        }
        
        shortCode := generateShortCode()
        urlStore[shortCode] = req.URL
        
        return URLMapping{
            ShortURL: c.Host() + "/" + shortCode,
            LongURL:  req.URL,
        }, nil
    })

    // 重定向短链接
    app.GET("/{shortCode}", func(c *gofr.Context) (interface{}, error) {
        shortCode := c.PathParam("shortCode")
        longURL, exists := urlStore[shortCode]
        
        if !exists {
            return nil, gofr.Error("URL not found")
        }
        
        return nil, c.Redirect(longURL)
    })

    app.Start()
}

这个实现包含了内存存储的短链接生成和重定向功能。GoFr的路由和上下文处理简化了HTTP请求的处理流程。对于生产环境,建议使用数据库持久化存储,并添加过期时间、访问统计等功能。

回到顶部