You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言如何通过Socket连接FastAPI的WebSocket接口URL?

报错根因

  • net.Dial 是用于建立底层TCP连接的接口,仅支持 IP:端口 格式的寻址参数,无法识别带路径的URL,这是你遇到报错的直接原因
  • 你要对接的FastAPI接口是WebSocket协议,它是基于HTTP握手后升级的应用层协议,不能直接用裸TCP连接传输数据,必须用WebSocket客户端实现来完成协议握手、帧封装解析等逻辑

正确实现方式

Go标准库没有内置WebSocket的实现,生态中最常用的第三方实现是gorilla/websocket,使用步骤如下:

  1. 安装依赖
    执行命令:
    go get github.com/gorilla/websocket

  2. 替换原有代码为以下内容

package main

import (
	"bufio"
	"fmt"
	"net/url"
	"os"

	"github.com/gorilla/websocket"
)

func main() {
	// 构造标准WebSocket连接地址,ws为协议标识,拼接主机端口和接口路径
	wsUrl := url.URL{Scheme: "ws", Host: "127.0.0.1:8000", Path: "/register"}
	fmt.Printf("正在连接: %s\n", wsUrl.String())

	// 发起WebSocket连接,自动完成握手升级
	conn, _, err := websocket.DefaultDialer.Dial(wsUrl.String(), nil)
	if err != nil {
		panic(fmt.Sprintf("连接失败: %v", err))
	}
	defer conn.Close()

	scanner := bufio.NewScanner(os.Stdin)
	for {
		fmt.Print("请输入要发送的内容: ")
		if !scanner.Scan() {
			break
		}
		sendText := scanner.Text()

		// 发送文本类型消息
		if err := conn.WriteMessage(websocket.TextMessage, []byte(sendText)); err != nil {
			fmt.Printf("发送消息失败: %v\n", err)
			return
		}

		// 读取服务端返回
		_, respMsg, err := conn.ReadMessage()
		if err != nil {
			fmt.Printf("接收消息失败: %v\n", err)
			return
		}
		fmt.Printf("服务端返回: %s\n", respMsg)
	}
}

这段代码可以直接运行,和你现有FastAPI服务的WebSocket接口完全兼容。

内容的提问来源于stack exchange,提问作者Phong Phạm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:36:03