温馨提示×

Go语言如何简化Linux网络配置

小樊
42
2025-11-20 18:06:36
栏目: 编程语言

在Go语言中,你可以使用标准库中的"net"包来简化Linux网络配置。以下是一些常见的网络配置任务及其在Go中的实现方法:

  1. 获取本地IP地址
package main

import (
	"fmt"
	"net"
)

func main() {
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		fmt.Println(err)
		return
	}

	for _, address := range addrs {
		var ip net.IP
		switch v := address.(type) {
		case *net.IPNet:
			ip = v.IP
		case *net.IPAddr:
			ip = v.IP
		}

		if ip.To4() != nil {
			fmt.Printf("Interface: %s\tAddress: %s\n", address.Interface(), ip.String())
		}
	}
}
  1. 配置TCP连接
package main

import (
	"fmt"
	"net"
	"time"
)

func main() {
	conn, err := net.DialTimeout("tcp", "google.com:80", 5*time.Second)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer conn.Close()

	_, err = conn.Write([]byte("GET / HTTP/1.0\r\n\r\n"))
	if err != nil {
		fmt.Println(err)
		return
	}

	buf := make([]byte, 1024)
	for {
		n, err := conn.Read(buf)
		if err != nil {
			fmt.Println(err)
			return
		}
		if n == 0 {
			break
		}
		fmt.Print(string(buf[:n]))
	}
}
  1. 配置UDP连接
package main

import (
	"fmt"
	"net"
)

func main() {
	conn, err := net.DialUDP("udp", nil, &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: 8080})
	if err != nil {
		fmt.Println(err)
		return
	}
	defer conn.Close()

	message := []byte("Hello, UDP!")
	_, err = conn.Write(message)
	if err != nil {
		fmt.Println(err)
		return
	}

	buf := make([]byte, 1024)
	n, _, err := conn.ReadFromUDP(buf)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("Received: %s\n", string(buf[:n]))
}
  1. 监听TCP端口
package main

import (
	"fmt"
	"net"
)

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

	fmt.Println("Listening on :8080")

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

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

	buf := make([]byte, 1024)
	n, err := conn.Read(buf)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("Received: %s\n", string(buf[:n]))
	conn.Write([]byte("Hello, Client!"))
}

这些示例展示了如何在Go中进行基本的网络配置和通信。你可以根据需要扩展这些示例,以实现更复杂的网络功能。

0