商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Ubuntu中Golang网络编程怎样实现

Ubuntu中Golang网络编程怎样实现

  发布于2026-07-09 阅读(0)

扫一扫,手机访问

在Ubuntu上折腾Golang网络编程,这事儿其实没那么玄乎。随便搭个TCP服务器、写个客户端,Go的标准库就能搞定。今天咱就手把手撸一遍,从环境准备到代码跑起来,一条龙讲清楚。

Ubuntu中Golang网络编程怎样实现

先说第一步:装Go。Ubuntu上装起来很简单,打开终端敲两行命令就行:

sudo apt update
sudo apt install golang-go

装完验证一下:go version能正常输出版本号,就算成了。接下来要设置两个环境变量——GOROOTGOPATH。前者是Go的安装路径,默认在/usr/lib/go;后者是你写项目代码的目录,通常放在$HOME/go。打开你的~/.bashrc~/.profile,加上这几行:

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

然后执行source ~/.bashrcsource ~/.profile,让变量生效。这一步搞定了,后面所有Go项目都能正常编译运行。

接下来创建项目。在$GOPATH目录下建个文件夹,比如叫netprog,然后在里面建一个main.go文件。目录结构大概是:~/go/src/netprog/main.go

现在才是重头戏——写网络程序。下面这个例子是一个最基础的TCP服务器,监听8080端口,收到客户端消息后原样回复一句“Message received”。代码直接贴进去:

package main

import (
    "bufio"
    "fmt"
    "net"
    "os"
)

func main() {
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        fmt.Println("Error listening:", err.Error())
        os.Exit(1)
    }
    defer listener.Close()
    fmt.Println("Listening on :8080")

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

func handleRequest(conn net.Conn) {
    defer conn.Close()
    reader := bufio.NewReader(conn)
    message, err := reader.ReadString('\n')
    if err != nil {
        fmt.Println("Error reading:", err.Error())
        return
    }
    fmt.Print("Received message: ", string(message))
    conn.Write([]byte("Message received\n"))
}

这段代码看起来有点多,但逻辑很简单:主协程监听端口,每接到一个连接就启动一个新的goroutine去处理,不阻塞主循环。处理函数读取一行数据,打印出来,再回复一句话。

怎么跑起来?终端进入项目目录:cd ~/go/src/netprog,然后运行go run main.go。控制台会输出“Listening on :8080”,说明服务器已经启动。

测试也很方便。打开另一个终端窗口,输入telnet localhost 8080(如果没有telnet,可以换成nc localhost 8080)。连接之后随便敲一行字,比如“hello”,按回车。你会看到服务器那边的控制台打印出接收到的消息,同时客户端这边收到“Message received”的响应。完美。

当然这只是个入门的小例子。实际项目中你可能需要处理HTTP请求、同时管理成百上千个连接,或者写一个完整的客户端。Go标准库里的nethttpbufio这些包非常强大,基本上常见网络功能都能直接拿来用。感兴趣的话,可以继续往深了研究——比如用net/http写个REST API,或者用goroutineschannel实现并发聊天室,都是很好的练手方向。

本文转载于:https://www.yisu.com/ask/86169039.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注