日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go 实现短链接服务

發(fā)布時間:2023/12/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 实现短链接服务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Go 實(shí)現(xiàn)短鏈接服務(wù)

我們在推廣的時候,經(jīng)常會碰到鏈接或者二維碼的時候,這時候鏈接太長,看起來不太友好,生成的二維碼也是密密麻麻的,所以會用到短鏈接服務(wù)。

主要思路

  • 直接生成短鏈接,短鏈接通過當(dāng)前時間戳轉(zhuǎn)換Base62

  • 將長鏈接和短鏈接數(shù)據(jù)保存到數(shù)據(jù)庫

  • 生成的時候,先查看下鏈接有沒有生成過,如果生成過,用之前生成的短鏈即可

  • 生成之后,需要寫個中間件做預(yù)處理,當(dāng)前url是否為短鏈,如果是短鏈,直接重定向到 長鏈接去。

  • 服務(wù)編寫好后,Nginx加一段配置 ,針對短鏈轉(zhuǎn)發(fā)到短鏈接服務(wù)。

  • 使用到的技術(shù)

    • gin web框架

    • gorm orm框架

    • viper 讀取配置https://github.com/catinello/base62

    • base62 生成base62的工具包

    核心代碼

    生成短鏈:

    func generateShort(longUrl string) string {var short ShortLinkshort.LongUrl = longUrlerr := DB.Find(&short, &short).Errorif err != nil {fmt.Println(err)}if short.ShortUrl != "" {return short.ShortUrl}rand.Seed(time.Now().UnixNano())var sb strings.Buildersb.WriteString("/")sb.WriteString(S_LINK)sb.WriteString("/")timestamp := time.Now().UnixNano() / 1e6sb.WriteString(base62.Encode(int(timestamp)))shortUrl := sb.String()shortInfo := ShortLink{ShortUrl: shortUrl,LongUrl: longUrl,}DB.Create(&shortInfo)return shortUrl }

    請求預(yù)處理重定向:

    router.Use(Redirect(), gin.Recovery())

    func Redirect() gin.HandlerFunc {return func(context *gin.Context) {url := context.Request.URLvar short ShortLinkshort.ShortUrl = url.String()err := DB.Find(&short, &short).Errorif err != nil {fmt.Println(err)}if short.LongUrl != "" {context.Redirect(http.StatusMovedPermanently, short.LongUrl)}} }

    Nginx 配置:

    location "~/slink/([a-z]|[A-Z]|[0-9]){7,8}$" { | proxy_pass http://127.0.0.1:7788; } location /slink/short { | proxy_pass http://127.0.0.1:7788/short; | proxy_redirect off; | proxy_set_header Host $host; | proxy_set_header X-Real-IP $remote_addr; | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | proxy_set_header X-Forwarded-Proto $scheme; | client_max_body_size 30m; | client_body_buffer_size 256k; | proxy_connect_timeout 90; | proxy_send_timeout 180; | proxy_read_timeout 180; | proxy_buffer_size 256k; | proxy_buffers 16 256k; | proxy_busy_buffers_size 1024k; | proxy_temp_file_write_size 1024k; }

    效果圖

    data.short 就是短鏈接啦,訪問試一下吧!

    項(xiàng)目地址:https://github.com/Fxuing/short-link

    總結(jié)

    以上是生活随笔為你收集整理的Go 实现短链接服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。