Rumah >pembangunan bahagian belakang >Golang >Pengenalan terperinci kepada terjemahan alamat IP di Golang

Pengenalan terperinci kepada terjemahan alamat IP di Golang

PHPz
PHPzasal
2023-04-04 17:28:202087semak imbas

Golang ialah bahasa pengaturcaraan berorientasikan objek Boleh dikatakan kebangkitannya sangat pesat dan mempunyai kepraktisan yang tinggi. Di Golang, kami biasanya perlu melakukan beberapa operasi penukaran alamat IP, yang mungkin menjadi masalah yang agak sukar untuk pemula. Artikel ini akan memperkenalkan anda kepada penukaran alamat IP di Golang secara terperinci, supaya anda boleh memahami pengetahuan ini dengan lebih baik.

Pertama, kita perlu memahami jenis alamat IP di Golang. Terdapat dua jenis alamat IP di Golang Satu ialah alamat IPv4, yang terdiri daripada integer tidak bertanda 32-bit dan biasanya dinyatakan seperti ini: a.b.c.d. Yang lain ialah alamat IPv6, yang terdiri daripada integer 128-bit dan biasanya diwakili seperti ini: a:b:c:d:e:f:g:h. Di Golang, kedua-dua jenis alamat IP ditakrifkan sebagai jenis net.IP.

Penukaran alamat IP biasanya merangkumi dua bahagian: format perwakilan rentetan alamat IP dan format perwakilan binari alamat IP. Di bawah ini kami akan menerangkan kedua-dua bahagian ini secara terperinci.

Yang pertama ialah format perwakilan rentetan alamat IP. Di Golang, kami boleh menukar alamat IP kepada rentetan dengan mudah, contohnya:

package main

import (
    "fmt"
    "net"
)

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

Dalam contoh ini, kami mencipta alamat IPv4 dengan memanggil fungsi net.IPv4. Seterusnya, kami memanggil kaedah ip.String() untuk menukarnya kepada rentetan dan mengeluarkan hasilnya kepada konsol. Output program ialah: 192.168.0.1.

Kami juga boleh menggunakan fungsi net.ParseIP untuk menukar rentetan kepada alamat IP, contohnya:

package main

import (
    "fmt"
    "net"
)

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

Dalam contoh ini, kami memanggil fungsi net.ParseIP untuk menukar aksara Rentetan ditukar kepada alamat IP. Perlu diingatkan di sini bahawa jika rentetan tidak boleh ditukar kepada alamat IP yang sah, fungsi net.ParseIP akan mengembalikan nilai nol. Output program ialah: c0a80001.

Dalam keputusan di atas, "c0a80001" ialah perwakilan heksadesimal bagi alamat IPv4 192.168.0.1. Oleh kerana alamat IPv4 terdiri daripada empat integer tidak bertanda 8-bit, selepas menukar empat integer ini kepada rentetan perenambelasan, kita boleh menyambungkannya bersama-sama untuk mendapatkan rentetan panjang 8. Di Golang, anda boleh menukar alamat IPv4 kepada kepingan bait panjang 4 dengan memanggil kaedah net.IP.To4(), dan kemudian memanggil fungsi hex.EncodeToString() untuk menukar kepingan bait ini kepada perwakilan Rentetan heksadesimal. Contohnya:

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))
    }
}

Dalam contoh ini, kami memanggil fungsi net.ParseIP untuk menukar rentetan kepada alamat IP. Seterusnya, kami memanggil kaedah ip.To4() untuk menukar alamat IP kepada kepingan bait panjang 4, dan memberikan hasilnya kepada pembolehubah ip4. Jika alamat IP bukan alamat IPv4, pembolehubah ip4 akan menjadi sifar. Akhir sekali, kami memanggil fungsi hex.EncodeToString untuk menukar kepingan bait ini kepada perwakilan rentetan heksadesimal. Output program ialah: c0a80001.

Seterusnya, kami akan menerangkan cara menukar alamat IP kepada perwakilan binarinya. Di Golang, anda boleh menukar alamat IPv4 kepada kepingan bait panjang 4 dengan memanggil kaedah net.IP.To4() untuk mendapatkan perwakilan binarinya. Contohnya:

package main

import (
    "fmt"
    "net"
)

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

Dalam contoh ini, kami memanggil fungsi net.ParseIP untuk menukar rentetan kepada alamat IP. Seterusnya, kami memanggil kaedah ip.To4() untuk menukar alamat IP kepada kepingan bait panjang 4, dan memberikan hasilnya kepada pembolehubah ip4. Jika alamat IP bukan alamat IPv4, pembolehubah ip4 akan menjadi sifar. Akhir sekali, kami mengeluarkan kepingan bait ini ke konsol. Output program ialah: [192 168 0 1].

Operasi penukaran alamat IPv6 adalah serupa dengan alamat IPv4. Di Golang, anda boleh mencipta alamat IPv6 dengan memanggil fungsi net.IPv6unspecified, contohnya:

package main

import (
    "fmt"
    "net"
)

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

Dalam contoh ini, kami memanggil fungsi net.IPv6unspecified untuk mencipta alamat IPv6. Alamat ini terdiri daripada 16 sifar dan mewakili alamat IPv6 yang tidak ditentukan. Akhir sekali, kami mengeluarkan alamat ini ke konsol. Output program ialah:::.

Begitu juga, kita juga boleh menukar rentetan kepada alamat IPv6 dengan memanggil fungsi net.ParseIP, contohnya:

package main

import (
    "fmt"
    "net"
)

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

Dalam contoh ini, kita memanggil net.ParseIP function Convert rentetan ke alamat IPv6. Output program ialah: 2001:db8::1.

Di Golang, format perwakilan binari alamat IPv6 juga terdiri daripada kepingan bait. Walau bagaimanapun, panjang kepingan bait ini ialah 16, bukan 4. Kami juga boleh menukar alamat IPv6 kepada perwakilan binarinya dengan memanggil kaedah net.IP.To16(), sebagai contoh:

package main

import (
    "fmt"
    "net"
)

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

Dalam contoh ini, kami memanggil fungsi net.ParseIP untuk menukar aksara Rentetan ditukar kepada alamat IPv6. Seterusnya, kami memanggil kaedah ip.To16() untuk menukar alamat IP kepada kepingan 16 bait dan mengeluarkan hasilnya kepada konsol. Output program ialah: 20010db800000000000000000000001.

Ringkasnya, penukaran alamat IP ialah operasi yang agak asas dan yang sering digunakan dalam pembangunan. Di Golang, kita boleh menukar alamat IP dengan mudah ke dalam format perwakilan rentetan atau format perwakilan binari, cuma panggil kaedah yang sepadan. Sudah tentu, dalam pembangunan sebenar, kami juga perlu melakukan beberapa operasi lain pada alamat IP, seperti mendapatkan nama hos, nombor port dan maklumat lain. Kami akan menerangkan pengetahuan ini secara terperinci dalam artikel seterusnya.

Atas ialah kandungan terperinci Pengenalan terperinci kepada terjemahan alamat IP di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn