ホームページ >バックエンド開発 >Golang >golangでURLエンコードを実装する方法

golangでURLエンコードを実装する方法

PHPz
PHPzオリジナル
2023-04-24 15:49:102666ブラウズ

近年、インターネット技術の発展に伴い、Go言語を使用した開発を行うプログラム開発者が増えています。 Go 言語は効率的、高速、安全なプログラミング言語であり、URL エンコードもサポートしています。ただし、Go で URL エンコードを自分で実装したい場合は、次のコンテンツが役立ちます。

URL エンコードは、特殊文字を URL で受け入れて送信できる文字に変換する方法です。スペースや漢字などの非 ASCII 文字は URL アドレスでは許可されないため、エンコードする必要があります。 Go 言語では、「net/url」パッケージを使用して URL エンコードとデコードを実装できます。以下はサンプル コードです。

package main

import (
    "fmt"
    "net/url"
)

func main() {
    originalString := "https://www.example.com/path?foo=bar&baz=qux#anchor"
    encodedString := url.QueryEscape(originalString)
    decodedString, err := url.QueryUnescape(encodedString)

    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Println("Original string:", originalString)
    fmt.Println("Encoded string:", encodedString)
    fmt.Println("Decoded string:", decodedString)
}

上記のコードでは、まずエンコードする必要がある URL アドレス文字列originalString を定義し、次に「url.QueryEscape」関数を呼び出してそれをエンコードします。次に、「url.QueryUnescape」関数を使用してエンコードされた文字列をデコードし、結果を decodedString 変数に保存します。

上記のコードの出力結果は次のとおりです。

Original string: https://www.example.com/path?foo=bar&baz=qux#anchor
Encoded string: https%3A%2F%2Fwww.example.com%2Fpath%3Ffoo%3Dbar%26baz%3Dqux%23anchor
Decoded string: https://www.example.com/path?foo=bar&baz=qux#anchor

上記の出力結果からわかるように、「url.QueryEscape」関数でエンコードした後、元の文字列が変換されます。エンコードされた文字列に変換する場合、非 ASCII 文字はすべて「%XX」の形式にエスケープされます。逆に、「url.QueryUnescape」関数でデコードすると、エンコードされた文字列は元の文字列に戻ります。

「net/url」パッケージの使用に加えて、URL エンコードを手動で実装することもできます。以下は、URL エンコードを手動で実装する例です。

package main

import (
    "fmt"
    "strings"
)

var encodeMap = map[byte]string{
    '!':  "%21",
    '#':  "%23",
    '$':  "%24",
    '&':  "%26",
    '\'': "%27",
    '(':  "%28",
    ')':  "%29",
    '*':  "%2A",
    '+':  "%2B",
    ',':  "%2C",
    '/':  "%2F",
    ':':  "%3A",
    ';':  "%3B",
    '=':  "%3D",
    '?':  "%3F",
    '@':  "%40",
    '[':  "%5B",
    ']':  "%5D",
}

func encode(s string) string {
    var b strings.Builder
    for i := 0; i < len(s); i++ {
        ch := s[i]
        if val, ok := encodeMap[ch]; ok {
            b.WriteString(val)
        } else {
            b.WriteByte(ch)
        }
    }
    return b.String()
}

func main() {
    originalString := "https://www.example.com/path?foo=bar&baz=qux#anchor"
    encodedString := encode(originalString)
    fmt.Println(encodedString)
}

上記のコードでは、まず「encodeMap」変数を定義します。この変数には、エスケープする必要がある特殊文字と対応するエスケープ文字列が含まれています。次に、URL エンコードを実行する「encode」関数を定義します。関数では、エンコードする必要がある文字列を走査し、各文字が「encodeMap」にあるかどうかを確認します。存在する場合は、対応するエスケープ文字列を使用して置き換えます。存在しない場合は、そのまま出力します。

上記の 2 つの方法により、Go 言語で URL エンコードとデコードを実装できます。特に、「net/url」パッケージを使用すると、短いコードとより包括的な URL エンコード ルールを実装できますが、手動実装は比較的シンプルで理解しやすく、小規模なエンコードのニーズに適しています。実際のアプリケーションでは、特定のシナリオに応じて適切なエンコード方法を選択できます。

以上がgolangでURLエンコードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。