如何使用GO构建URL缩短器
#编程 #go #url #backenddevelopment

说您已经创建了Google文档或看到了指向视频的链接,并希望与您的朋友分享,但是该链接需要更短。这就是URL缩短器提供帮助的地方。有些甚至更进一步,让您自定义链接。

我经常使用bitly缩短和自定义链接。

在我的previous article中,我分享了我将重点放在两件事上 - 参加后端开发和技术写作。这是为了证明我的承诺。有什么比申请和教学更好的学习方式?

我们将使用我最喜欢的编程语言goð构建简单 url缩短器。

我们可以吗?...是!

先决条件

  • 在系统上安装,下载here
  • 代码编辑器 - 尝试VS Code
  • 愿意成为gopherð

设计

URL Shortener将是一个基本的Web应用程序,可以使用唯一的缩短键将koude0 requests,缩短URL并将用户重定向到原始URL。我们将我们一张in-memory地图存储缩短键和原始URL之间的关系。

构建流

让我们从为我们的URL Shortener编写代码开始。我们将把实施分解为以下步骤:

步骤1:设置项目

打开您的术语并为项目创建新目录,然后初始化Go module以管理依赖项。

mkdir go-url-short

cd go-url-short

go mod init go-url-short

go mod init是创建一个新的go.mod文件,该文件将是项目文件夹中的模块。

snip of go.mod file in VS code

您可以从VS代码打开文件夹,或者在终端中,输入code .

步骤2:导入软件包

go就是全部有关的包裹 - 它们是每个GO程序的核心。
在项目目录中创建一个名为main.go的提交的文件,然后输入以下代码:

package main

import (
    "fmt"
    "math/rand"
    "net/http"
    "time"
)

在此初步步骤中,我们为GO程序导入必要的软件包。我们使用fmt进行格式化和打印,math/rand用于生成随机键,用于处理HTTP请求的net/http和用于接种随机数生成器的time

步骤3:定义URL缩短器结构

type URLShortener struct {
    urls map{string}string
}

我们创建了一个URLShortener struct,以管理原始URL及其缩短版本之间的映射。该结构将具有一个urls字段,该字段是一张缩短键,作为键,原始URL作为值。

步骤4:实施URL缩短

func (us *URLShortener) HandleShorten(w http.ResponseWriter, r *http.Request) {
    if r.Method != http.MethodPost {
        http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
        return
    }

    originalURL := r.FormValue("url")
    if originalURL == "" {
        http.Error(w, "URL parameter is missing", http.StatusBadRequest)
        return
    }

    // Generate a unique shortened key for the original URL
    shortKey := generateShortKey()
    us.urls[shortKey] = originalURL

    // Construct the full shortened URL
    shortenedURL := fmt.Sprintf("http://localhost:8080/short/%s", shortKey)

    // Render the HTML response with the shortened URL
    w.Header().Set("Content-Type", "text/html")
    responseHTML := fmt.Sprintf(`
        <h2>URL Shortener</h2>
        <p>Original URL: %s</p>
        <p>Shortened URL: <a href="%s">%s</a></p>
        <form method="post" action="/shorten">
            <input type="text" name="url" placeholder="Enter a URL">
            <input type="submit" value="Shorten">
        </form>
    `, originalURL, shortenedURL, shortenedURL)
    fmt.Fprintf(w, responseHTML)
}

在这里,我们为URLShortener结构定义了HandleShorten方法。此方法处理帖子请求,验证输入URL,生成一个唯一的简短键,并在HTML响应中显示原始和缩短的URL以及输入表单,以供用户输入更多URL。

步骤5:实施URL重定向

func (us *URLShortener) HandleRedirect(w http.ResponseWriter, r *http.Request) {
    shortKey := r.URL.Path[len("/short/"):]
    if shortKey == "" {
        http.Error(w, "Shortened key is missing", http.StatusBadRequest)
        return
    }

    // Retrieve the original URL from the `urls` map using the shortened key
    originalURL, found := us.urls[shortKey]
    if !found {
        http.Error(w, "Shortened key not found", http.StatusNotFound)
        return
    }

    // Redirect the user to the original URL
    http.Redirect(w, r, originalURL, http.StatusMovedPermanently)
}

步骤6:生成短键

func generateShortKey() string {
    const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    const keyLength = 6

    rand.Seed(time.Now().UnixNano())
    shortKey := make([]byte, keyLength)
    for i := range shortKey {
        shortKey[i] = charset[rand.Intn(len(charset))]
    }
    return string(shortKey)
}

我们创建一个generateShortKey函数,以生成原始URL的独特短键。此函数生成一个随机的字母数字键,长度为6个字符,确保键的唯一性。

步骤7:主功能和服务器设置

func main() {
    shortener := &URLShortener{
        urls: make(map[string]string),
    }

    http.HandleFunc("/shorten", shortener.HandleShorten)
    http.HandleFunc("/short/", shortener.HandleRedirect)

    fmt.Println("URL Shortener is running on :8080")
    http.ListenAndServe(":8080", nil)
}

main函数中,我们创建了一个URLShortener struct的实例,并设置了HTTP处理程序以缩短和重定向。我们在port 8081上聆听,服务器开始运行。

运行URL缩短器

要运行URL缩短器,请按照以下步骤:

  • 将提供的GO代码保存在名为main.go的文件中。
  • 打开终端或使用代码编辑器中的终端,导航到main.go文件所在的目录。
  • 运行此go build命令:
go build -o go-url-short main.go

-o标志用于指定输出二进制名称,该名称命名为go-url-short

server is running

  • 打开网络浏览器并转到URL:
http://localhost:8081

  • 您应该看到带有输入表单的URL Shortener网页。输入一个长URL,单击“缩短”,页面将显示原始URL和缩短的URL。

这是一个GIF,显示运行的应用

GIF showing the app

可以在此GitHub repo.

上访问完整代码

结论

使用GO构建URL缩短器是了解Web开发,HTTP处理和使用数据结构的好方法。我们的简单实现包括基本要素:用于用户交互的URL缩短,重定向和基本的HTML形式。

这个项目可能是增强用户界面,添加分析和探索更高级功能的起点。

愉快的编码! ð»