Home > Backend Development > Golang > URL Shortening Service using Go

URL Shortening Service using Go

DDD
Release: 2025-01-30 02:25:14
Original
330 people have browsed it

URL Shortening Service using Go

Ever wondered how services like Bitly create concise, shareable links from lengthy URLs? This tutorial guides you through building a URL shortener using Go, Redis, and Docker. It's a great project for developers to enhance their skills in practical web development.

Key Learning Outcomes

This tutorial covers:

  • Go project setup with modules.
  • RESTful API development in Go.
  • Leveraging Redis for efficient key-value storage.
  • Structuring Go code for maintainability and scalability.

Prerequisites

Ensure you have the following installed:

  • Docker
  • Docker Desktop (Install it on your system)

Step-by-Step Implementation

1. Project Initialization

Create a project directory and initialize a Go module:

<code class="language-bash">mkdir url-shortener
cd url-shortener
go mod init github.com/<username>/url-shortener</code>
Copy after login

This generates a go.mod file for dependency management. Replace <username> with your GitHub username.

2. Project Structure

Organize your project files for clarity:

<code>url-shortener/
├── handlers/         # API request handlers
│   └── handlers.go
├── models/           # Data structures
│   └── url.go
├── router/           # Routing configuration
│   └── router.go
├── storage/          # Redis interaction logic
│   └── redis-store.go
├── main.go           # Application entry point
├── Dockerfile        # Docker build instructions
├── docker-compose.yml # Docker Compose configuration
└── go.mod            # Go module file</code>
Copy after login

3. Dependency Installation

Install necessary Go packages:

<code class="language-bash">go get github.com/go-redis/redis/v8
go get github.com/gorilla/mux</code>
Copy after login

These provide Redis interaction and routing capabilities.

4. Data Model Definition

In models/url.go, define data structures for requests and responses:

<code class="language-go">package models

type ShortenRequest struct {
 URL string `json:"url"`
}

type ShortenResponse struct {
 ShortURL string `json:"short_url"`
}</code>
Copy after login

5. Redis Storage Configuration

Implement Redis operations in storage/redis-store.go:

<code class="language-go">// ... (RedisStore struct and methods as in original example) ...</code>
Copy after login

This code handles saving and retrieving URLs using Redis. The FNV-1a hash function ensures efficient short URL generation.

6. API Handler Implementation

Create the API logic in handlers/handlers.go:

<code class="language-go">// ... (ShortenURL, RedirectURL, GetTopDomains functions as in original example) ...</code>
Copy after login

These handlers manage URL shortening, redirection, and top domain retrieval.

7. Route Setup

Define API routes in router/router.go:

<code class="language-go">// ... (SetupRouter function as in original example) ...</code>
Copy after login

This configures the routes for shortening, redirection, and retrieving top domains.

8. Application Entry Point

In main.go, start the HTTP server:

<code class="language-go">// ... (main function as in original example) ...</code>
Copy after login

This initializes the router and starts the server, logging all registered routes.

9. Dockerfile Creation

Create a Dockerfile to containerize the application:

<code class="language-dockerfile">// ... (Dockerfile content as in original example) ...</code>
Copy after login

10. docker-compose.yml Configuration

Use docker-compose.yml to manage the app and Redis:

<code class="language-yaml">// ... (docker-compose.yml content as in original example) ...</code>
Copy after login

11. Application Execution

Build and run the application:

<code class="language-bash">docker-compose up --build</code>
Copy after login

This builds the Docker images and starts the containers.

12. API Endpoint Testing

Test the API endpoints using tools like Postman or curl (examples provided in the original response).

Conclusion

You've successfully built a URL shortening service! This project demonstrates practical Go, Redis, and Docker skills.

Future Enhancements

Consider these extensions:

  • Customizable Short URLs: Allow users to define their short links.
  • Analytics Dashboard: Track URL usage statistics.
  • URL Expiration: Implement short URL expiry.

The complete code is available [link to repository]. Remember to replace placeholders like <username> with your actual values.

The above is the detailed content of URL Shortening Service using Go. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template