说您已经创建了Google文档或看到了指向视频的链接,并希望与您的朋友分享,但是该链接需要更短。这就是URL缩短器提供帮助的地方。有些甚至更进一步,让您自定义链接。
我经常使用bitly缩短和自定义链接。
在我的previous article中,我分享了我将重点放在两件事上 - 参加后端开发和技术写作。这是为了证明我的承诺。有什么比申请和教学更好的学习方式?
我们将使用我最喜欢的编程语言goð构建简单 url缩短器。
我们可以吗?...是!
先决条件
设计
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
文件,该文件将是项目文件夹中的模块。
您可以从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
。
- 打开网络浏览器并转到URL:
http://localhost:8081
- 您应该看到带有输入表单的URL Shortener网页。输入一个长URL,单击“缩短”,页面将显示原始URL和缩短的URL。
这是一个GIF,显示运行的应用
可以在此GitHub repo.
上访问完整代码结论
使用GO构建URL缩短器是了解Web开发,HTTP处理和使用数据结构的好方法。我们的简单实现包括基本要素:用于用户交互的URL缩短,重定向和基本的HTML形式。
这个项目可能是增强用户界面,添加分析和探索更高级功能的起点。
愉快的编码! ð»