在Debian系統上進行Golang網絡編程前,需先完成環境搭建:
sudo apt update && sudo apt install golang-go
go version,若輸出類似go version go1.21.0 linux/amd64則說明安裝成功。~/.bashrc文件,添加以下內容以全局使用go命令:export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
執行source ~/.bashrc使配置生效。Golang的net標準庫提供了底層網絡支持,以下是一個完整的TCP通信示例:
server.go)package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
// 監聽8080端口
listener, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("監聽失敗:", err.Error())
os.Exit(1)
}
defer listener.Close()
fmt.Println("服務器已啟動,監聽端口: 8080")
for {
// 接受客戶端連接
conn, err := listener.Accept()
if err != nil {
fmt.Println("接受連接失敗:", err.Error())
continue
}
// 啟動goroutine處理客戶端請求(并發支持)
go handleRequest(conn)
}
}
// 處理客戶端請求
func handleRequest(conn net.Conn) {
defer conn.Close() // 關閉連接
reader := bufio.NewReader(conn)
for {
// 讀取客戶端發送的消息
message, err := reader.ReadString('\n')
if err != nil {
fmt.Println("讀取消息失敗:", err.Error())
return
}
fmt.Printf("收到客戶端消息: %s", message)
// 發送回復
_, err = conn.Write([]byte("服務器已收到消息\n"))
if err != nil {
fmt.Println("發送回復失敗:", err.Error())
return
}
}
}
client.go)package main
import (
"bufio"
"fmt"
"net"
"os"
)
func main() {
// 連接到本地8080端口
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
fmt.Println("連接服務器失敗:", err.Error())
os.Exit(1)
}
defer conn.Close()
fmt.Println("已連接到服務器")
// 啟動goroutine接收服務器回復
go func() {
reader := bufio.NewReader(conn)
for {
message, err := reader.ReadString('\n')
if err != nil {
fmt.Println("接收服務器消息失敗:", err.Error())
return
}
fmt.Printf("服務器回復: %s", message)
}
}()
// 從標準輸入讀取用戶輸入并發送到服務器
reader := bufio.NewReader(os.Stdin)
for {
fmt.Print("請輸入消息: ")
message, _ := reader.ReadString('\n')
_, err := conn.Write([]byte(message))
if err != nil {
fmt.Println("發送消息失敗:", err.Error())
return
}
}
}
go run server.go,啟動服務器;go run client.go,啟動客戶端;Hello Server),服務器終端將顯示收到的消息,并回復確認。除TCP外,Golang的net/http包可快速構建HTTP服務,適用于Web應用開發:
package main
import (
"fmt"
"net/http"
)
// 處理根路徑請求
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, Golang HTTP Server!")
}
func main() {
// 注冊路由和處理函數
http.HandleFunc("/", handler)
// 啟動HTTP服務器,監聽8080端口
fmt.Println("HTTP服務器已啟動,訪問地址: http://localhost:8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Println("服務器啟動失敗:", err.Error())
}
}
運行后,在瀏覽器中訪問http://localhost:8080,將顯示Hello, Golang HTTP Server!
Golang標準庫及第三方庫支持多種網絡協議,滿足不同場景需求:
net包的ListenUDP和DialUDP函數,適用于實時性要求高的場景(如視頻流、在線游戲);github.com/gorilla/websocket,實現全雙工通信(如實時聊天、推送服務);net/rpc包,實現遠程過程調用(如分布式系統通信);gnet(事件驅動、非阻塞I/O)、evio(輕量級、高性能),適用于高并發場景。通過以上步驟,可在Debian系統中快速上手Golang網絡編程。根據業務需求,可結合標準庫或第三方庫擴展功能,構建復雜的網絡應用。