Try it yourself with our free Url Encoder tool — runs entirely in your browser, no signup needed.

How to URL decode in Go

How to URL Decode in Go

URL decoding is the process of converting a URL-encoded string back into its original form. This is a crucial step when working with URLs, as it allows you to extract and manipulate the original data. In Go, URL decoding is a straightforward process that can be accomplished using the net/url package.

Quick Example

Here is a minimal example of how to URL decode a string in Go:

package main

import (
	"fmt"
	"net/url"
)

func main() {
	encodedURL := "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dvalue"
	decodedURL, err := url.QueryUnescape(encodedURL)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(decodedURL)
}

This code takes a URL-encoded string, decodes it using the url.QueryUnescape function, and prints the result.

Step-by-Step Breakdown

Let's walk through the code line by line:

  • package main: This is the package declaration, which is required for every Go program.
  • import ( "fmt" "net/url" ): We import the fmt package for printing and the net/url package for URL decoding.
  • func main(): This is the entry point of the program.
  • encodedURL := "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dvalue": We define a URL-encoded string.
  • decodedURL, err := url.QueryUnescape(encodedURL): We call the url.QueryUnescape function to decode the URL. This function returns two values: the decoded URL and an error.
  • if err != nil { ... }: We check if an error occurred during decoding. If so, we print the error and return.
  • fmt.Println(decodedURL): We print the decoded URL.

Handling Edge Cases

Here are some common edge cases to consider when URL decoding in Go:

Empty/Null Input

If the input string is empty or null, the url.QueryUnescape function will return an empty string without error.

encodedURL := ""
decodedURL, err := url.QueryUnescape(encodedURL)
fmt.Println(decodedURL) // prints ""

Invalid Input

If the input string is not a valid URL, the url.QueryUnescape function will return an error.

encodedURL := " invalid url "
decodedURL, err := url.QueryUnescape(encodedURL)
fmt.Println(err) // prints "invalid URL escape sequence"

Large Input

The url.QueryUnescape function can handle large input strings without issue.

encodedURL := strings.Repeat("https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dvalue", 1000)
decodedURL, err := url.QueryUnescape(encodedURL)
fmt.Println(decodedURL) // prints the decoded URL

Unicode/Special Characters

The url.QueryUnescape function correctly handles Unicode and special characters.

encodedURL := "https%3A%2F%2Fexample.com%2Fpath%3Fquery%3D%F0%9F%98%80"
decodedURL, err := url.QueryUnescape(encodedURL)
fmt.Println(decodedURL) // prints the decoded URL with Unicode character

Common Mistakes

Here are some common mistakes developers make when URL decoding in Go:

Mistake 1: Not Checking for Errors

decodedURL, _ := url.QueryUnescape(encodedURL)
fmt.Println(decodedURL) // ignores potential errors

Corrected code:

decodedURL, err := url.QueryUnescape(encodedURL)
if err != nil {
	fmt.Println(err)
	return
}
fmt.Println(decodedURL)

Mistake 2: Using the Wrong Function

decodedURL := url.PathUnescape(encodedURL)
fmt.Println(decodedURL) // incorrect function for query string decoding

Corrected code:

decodedURL, err := url.QueryUnescape(encodedURL)
fmt.Println(decodedURL)

Mistake 3: Not Handling Unicode Characters

decodedURL := string([]byte(encodedURL))
fmt.Println(decodedURL) // does not handle Unicode characters correctly

Corrected code:

decodedURL, err := url.QueryUnescape(encodedURL)
fmt.Println(decodedURL)

Performance Tips

Here are some performance tips for URL decoding in Go:

  • Use the url.QueryUnescape function instead of rolling your own implementation.
  • Avoid using the strings.Replace function to decode URL-encoded strings, as it can be slow for large inputs.
  • Use the sync.Pool package to reuse decoded URL strings and reduce memory allocation.

FAQ

Q: What is the difference between url.QueryUnescape and url.PathUnescape?

A: url.QueryUnescape is used for decoding query strings, while url.PathUnescape is used for decoding URL paths.

Q: How do I handle Unicode characters in URL decoding?

A: The url.QueryUnescape function correctly handles Unicode characters.

Q: What happens if the input string is not a valid URL?

A: The url.QueryUnescape function returns an error.

Q: Can I use URL decoding for non-URL strings?

A: No, URL decoding is specifically designed for URL-encoded strings.

Q: How do I optimize URL decoding for performance?

A: Use the url.QueryUnescape function and consider using the sync.Pool package to reuse decoded URL strings.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp