ホームページ  >  記事  >  バックエンド開発  >  Golang での IP アドレス変換の詳細な紹介

Golang での IP アドレス変換の詳細な紹介

PHPz
PHPzオリジナル
2023-04-04 17:28:202025ブラウズ

Golang はオブジェクト指向プログラミング言語であり、その普及は非常に早く、実用性が高い言語と言えます。 Golang では通常、いくつかの IP アドレス変換操作を実行する必要がありますが、これは初心者にとっては比較的難しい問題かもしれません。この記事では、Golang での IP アドレス変換について詳しく紹介し、この知識をよりよく理解できるようにします。

まず、Golang の IP アドレスの種類を理解する必要があります。 Golang には 2 種類の IP アドレスがあり、1 つは IPv4 アドレスで、32 ビットの符号なし整数で構成され、通常は次のように表現されます: a.b.c.d.もう 1 つは IPv6 アドレスで、128 ビットの整数で構成され、通常は a:b:c:d:e:f:g:h のように表されます。 Golang では、両方の IP アドレス タイプが net.IP タイプとして定義されます。

IP アドレスの変換には、通常、IP アドレスの文字列表現形式と IP アドレスのバイナリ表現形式の 2 つの部分が含まれます。以下では、これら 2 つの部分について詳しく説明します。

1 つ目は、IP アドレスの文字列表現形式です。 Golang では、IP アドレスを次のような文字列に簡単に変換できます。

package main

import (
    "fmt"
    "net"
)

func main() {
    ip := net.IPv4(192, 168, 0, 1)
    fmt.Println(ip.String())
}

この例では、net.IPv4 関数を呼び出して IPv4 アドレスを作成します。次に、ip.String() メソッドを呼び出して文字列に変換し、結果をコンソールに出力します。プログラムの出力は 192.168.0.1 です。

net.ParseIP 関数を使用して文字列を IP アドレスに変換することもできます。例:

package main

import (
    "fmt"
    "net"
)

func main() {
    ip := net.ParseIP("192.168.0.1")
    fmt.Println(ip)
}

この例では、net.ParseIP 関数を呼び出して文字列を IP アドレスに変換します。 IPアドレス。ここで、文字列を有効な IP アドレスに変換できない場合、net.ParseIP 関数は nil 値を返すことに注意してください。プログラムの出力は c0a80001 です。

上記の結果の「c0a80001」は、IPv4 アドレス 192.168.0.1 の 16 進表現です。 IPv4 アドレスは 4 つの 8 ビット符号なし整数で構成されているため、これら 4 つの整数を 16 進文字列に変換した後、それらを結合して長さ 8 の文字列を取得できます。 Golang では、net.IP.To4() メソッドを呼び出して IPv4 アドレスを長さ 4 のバイト スライスに変換し、次に hex.EncodeToString() 関数を呼び出してこのバイト スライスを 16 進数の String 表現に変換できます。例:

package main

import (
    "encoding/hex"
    "fmt"
    "net"
)

func main() {
    ip := net.ParseIP("192.168.0.1")
    if ip4 := ip.To4(); ip4 != nil {
        fmt.Println(hex.EncodeToString(ip4))
    }
}

この例では、net.ParseIP 関数を呼び出して文字列を IP アドレスに変換します。次に、ip.To4() メソッドを呼び出して IP アドレスを長さ 4 のバイト スライスに変換し、その結果を ip4 変数に割り当てました。 IP アドレスが IPv4 アドレスではない場合、ip4 変数は nil になります。最後に、hex.EncodeToString 関数を呼び出して、このバイト スライスを 16 進数の文字列表現に変換しました。プログラムの出力は c0a80001 です。

次に、IP アドレスをバイナリ表現に変換する方法を説明します。 Golang では、net.IP.To4() メソッドを呼び出してバイナリ表現を取得することで、IPv4 アドレスを長さ 4 のバイト スライスに変換できます。例:

package main

import (
    "fmt"
    "net"
)

func main() {
    ip := net.ParseIP("192.168.0.1")
    if ip4 := ip.To4(); ip4 != nil {
        fmt.Println(ip4)
    }
}

この例では、net.ParseIP 関数を呼び出して文字列を IP アドレスに変換します。次に、ip.To4() メソッドを呼び出して IP アドレスを長さ 4 のバイト スライスに変換し、その結果を ip4 変数に割り当てました。 IP アドレスが IPv4 アドレスではない場合、ip4 変数は nil になります。最後に、このバイト スライスをコンソールに出力します。プログラムの出力結果は [192 168 0 1] です。

IPv6 アドレスの変換操作は、IPv4 アドレスの変換操作と同様です。 Golang では、net.IPv6unspecified 関数を呼び出して IPv6 アドレスを作成できます。例:

package main

import (
    "fmt"
    "net"
)

func main() {
    ip := net.IPv6unspecified
    fmt.Println(ip)
}

この例では、net.IPv6unspecified 関数を呼び出して IPv6 アドレスを作成しました。このアドレスは 16 個のゼロで構成され、不特定の IPv6 アドレスを表します。最後に、このアドレスをコンソールに出力します。プログラムの出力は::: です。

同様に、net.ParseIP 関数を呼び出して文字列を IPv6 アドレスに変換することもできます。たとえば、次のようになります。

package main

import (
    "fmt"
    "net"
)

func main() {
    ip := net.ParseIP("2001:db8::1")
    fmt.Println(ip)
}

この例では、net.ParseIP 関数を呼び出して、文字列は IPv6 アドレスに変換されます。プログラムの出力結果は 2001:db8::1 です。

Golang では、IPv6 アドレスのバイナリ表現形式もバイト スライスで構成されます。ただし、このバイト スライスの長さは 4 ではなく 16 です。 net.IP.To16() メソッドを呼び出して、IPv6 アドレスをバイナリ表現に変換することもできます。たとえば、次のようになります。

package main

import (
    "fmt"
    "net"
)

func main() {
    ip := net.ParseIP("2001:db8::1")
    fmt.Println(ip.To16())
}

この例では、net.ParseIP 関数を呼び出して文字列を変換します。 IPv6 アドレス。次に、ip.To16() メソッドを呼び出して IP アドレスを 16 バイトのスライスに変換し、結果をコンソールに出力します。プログラムの出力は、20010db8000000000000000000000001 です。

要約すると、IP アドレス変換は比較的基本的な操作であり、開発でよく使用されます。 Golang では、対応するメソッドを呼び出すだけで、IP アドレスを文字列表現形式またはバイナリ表現形式に簡単に変換できます。もちろん、実際の開発では、ホスト名やポート番号などの情報の取得など、IP アドレスに対して他の操作を実行する必要もあります。この知識については、今後の記事で詳しく説明します。

以上がGolang での IP アドレス変換の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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