在Go语言中,你可以使用标准库中的"net"包来简化Linux网络配置。以下是一些常见的网络配置任务及其在Go中的实现方法:
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())
}
}
}
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]))
}
}
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]))
}
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中进行基本的网络配置和通信。你可以根据需要扩展这些示例,以实现更复杂的网络功能。