Home  >  Article  >  Backend Development  >  How to remove port in golang

How to remove port in golang

PHPz
PHPzOriginal
2023-03-31 10:24:32732browse

In recent years, the golang language has received widespread attention among many developers. The reason is that golang has many advantages, such as excellent performance, high efficiency, advanced memory management, etc. However, using golang for development also encounters some problems, one of which is how to remove the port. In this article, I will share how to remove ports using golang.

First, we need to know what a port is. Simply put, a port is a transport layer protocol (such as TCP or UDP) used to identify the connection between peers (such as your computer and the server of a website). In golang, we can use ports through the net package. The following is a simple usage example:

package main

import (
    "fmt"
    "net"
)

func main() {
    addr, err := net.ResolveTCPAddr("tcp", "localhost:8080")
    if err != nil {
        fmt.Println(err)
    }

    ln, err := net.ListenTCP("tcp", addr)
    if err != nil {
        fmt.Println(err)
    }

    for {
        conn, err := ln.Accept()
        if err != nil {
            fmt.Println(err)
            continue
        }

        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()

    // 在这里处理连接
}

This code demonstrates how to use the net package in golang to listen to a TCP port and handle the established connection. However, we focus on how to remove the port, not how to use the port.

Next, we will introduce how to use golang to remove the port. Suppose we want to listen for a portless TCP connection on localhost, we can use the following code:

package main

import (
    "fmt"
    "net"
)

func main() {
    l, err := net.Listen("tcp", ":")
    if err != nil {
        fmt.Println(err)
        return
    }

    for {
        conn, err := l.Accept()
        if err != nil {
            fmt.Println(err)
            continue
        }

        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()

    // 在这里处理连接
}

This code sets the address parameter of the TCP port to : To remove the port. This works in many situations. However, in some special occasions, we may need more fine-grained control over this.

In order to better control the listening IP address and port, we can use the net.InterfaceAddrs() function to bind. Here is a code example:

package main

import (
    "fmt"
    "net"
)

func main() {
    iface, err := net.InterfaceByName("en0")
    if err != nil {
        fmt.Println(err)
        return
    }

    addrs, err := iface.Addrs()
    if err != nil {
        fmt.Println(err)
        return
    }

    for _, addr := range addrs {
        ipaddr := addr.(*net.IPNet).IP
        if ipaddr.To4() != nil {
            laddr := &net.TCPAddr{IP: ipaddr, Port: 0}

            l, err := net.ListenTCP("tcp", laddr)
            if err != nil {
                fmt.Println(err)
                continue
            }

            fmt.Println(l.Addr().String())

            for {
                conn, err := l.Accept()
                if err != nil {
                    fmt.Println(err)
                    continue
                }

                go handleConnection(conn)
            }
        }
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()

    // 在这里处理连接
}

This code takes a list of IP addresses for an interface, then iterates through each address and attempts to bind a portless listener on that address. At the same time, after each successful binding, we will print the bound address and port information. Of course, we can also filter out the port part through the output results to remove the port.

In summary, the method of using golang to remove ports is very simple. You only need to understand some practical functions provided in the net package. Next, I hope this article will be helpful to you and allow you to control ports more accurately in golang development.

The above is the detailed content of How to remove port in golang. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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