在Ubuntu系统中进行Golang网络编程时,网络配置是一个重要的步骤。以下是一些基本的网络配置方法和步骤:
使用Netplan配置网络(适用于Ubuntu 18.04及以上版本)
sudo nano /etc/netplan/01-netcfg.yaml
。network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses: [-192.168.1.10/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
sudo netplan apply
。ip addr show ens33
或 ping -c 4 google.com
。使用 /etc/network/interfaces
配置网络(适用于较旧版本的Ubuntu)
sudo vi /etc/network/interfaces
。eth0
接口配置静态IP地址。auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
sudo /etc/init.d/networking restart
。ifconfig eth0
。设置环境变量
设置 GOPROXY
环境变量以使用代理或国内镜像源。
export GOPROXY=https://goproxy.cn,direct
处理网络连接
在Go程序中,可以使用 net
包创建客户端和服务器,处理TCP/UDP连接。
package main
import (
"fmt"
"net"
)
func main() {
listener, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Error listening:", err)
return
}
defer listener.Close()
fmt.Println("Server started, listening on port 8080")
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting:", err)
continue
}
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
buffer := make([]byte, 1024)
for {
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
fmt.Println("Received:", string(buffer[:n]))
response := "Server received: " + string(buffer[:n])
_, err = conn.Write([]byte(response))
if err != nil {
fmt.Println("Error writing:", err.Error())
return
}
}
}
HTTP服务器和客户端
使用 net/http
包实现HTTP服务器和客户端。
// HTTP Server
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, Golang!")
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("Starting server at :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("Error starting server:", err)
}
}
// HTTP Client
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("http://localhost:8080")
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Received from server:", string(body))
}
通过以上步骤,你可以在Ubuntu系统上进行基本的网络配置,并使用Golang进行网络编程。根据你的具体需求,可能需要进一步调整配置文件和代码。